J'ai la configuration suivante sur ma page Web

<div id="clickable">
  <a href="hello.com">Here!</a>
</div>

Y a-t-il un moyen que je pourrais utiliser pour éviter que l'événement click ne déclenche la div. Je suppose que cela a quelque chose à voir avec la définition de quelque chose dans l'attribut onclick pour la balise d'ancrage, mais essayer des choses simples comme e.preventDefault() n'a pas fonctionné.

Aidez-moi? Merci!

9
Navneet 1 déc. 2011 à 04:43

5 réponses

Meilleure réponse

E.preventDefault (); ne fonctionnera pas dans les attributs onclick car e n'est pas défini. Aussi e.preventDefault (); ne veut pas que vous vouliez arrêter de bouillonner, vous avez besoin de e.stopPropagation ();

Soit utiliser;

onclick="$(this).stopPropagation();"

Sur votre ancre, ou

$(a).click(function(e){
  e.stopPropagation();
});

Dans vos événements.

12
user910533user910533 1 déc. 2011 à 00:52

Expansion de Vanilla JS sur la réponse acceptée. event.stopPropagation() est la méthode la plus spécifique et prévisible pour empêcher les événements de se propager aux conteneurs parents sans désactiver le comportement par défaut. Dans les exemples suivants, le <a/> ne déclenchera pas l'alerte même s'il est contenu dans un <div/> cliquable.

<script>
  function linkHandler(event) {
    event.stopPropagation()
  }
</script>
<div onclick="alert('fail)">
  <a href="http://stackoverflow.com" onclick="linkHandler(event)">Link</a>
</div>
1
Poison Oak 18 nov. 2018 à 20:02

Vous pouvez return false; ou vous assurer que votre fonction utilise e comme argument

$("#clickable a").click(function(e){
   //stuff
   e.preventDefault;
});
0
Gregg B 1 déc. 2011 à 00:45

e.preventDefault() n'empêche pas l'événement de se propager. Vous devez ajouter e.stopPropagation() ou le remplacer par return false.

Vous pouvez en savoir plus sur les différences entre ces trois dans cette réponse.

3
Community 23 mai 2017 à 10:30

Vous pouvez utiliser onclick = "return false;"

<a href="#" onclick="return false;">stuff</a>

1
Slipstream 5 mars 2013 à 15:12
8335179