J'ai une div à laquelle j'ai attaché un onclick
événement. dans cette div, il y a une balise avec un lien. Lorsque je clique sur le lien, l' onclick
événement du div est également déclenché. Comment puis-je désactiver cela afin que si le lien est cliqué sur le div onclick
ne soit pas tiré?
scénario:
$(document).ready(function(){
$(".header").bind("click", function(){
$(this).children(".children").toggle();
});
})
Code HTML:
<div class="header">
<a href="link.html">some link</a>
<ul class="children">
<li>some list</li>
</ul>
</div>
$(".header a")
par$(".header *")
et j'ai sélectionné un enfant (div, formulaires, entrée, etc.).rel
lightbox configurée de fonctionnerOu, plutôt que d'avoir un gestionnaire d'événements supplémentaire pour empêcher un autre gestionnaire, vous pouvez utiliser l' argument Objet d'événement transmis à votre gestionnaire d'événements click pour déterminer si un enfant a été cliqué.
target
sera l'élément cliqué etcurrentTarget
sera le div .header:la source
currentTarget
, mais si pour une raison quelconque vous devez prendre en charge IE6-8, ils ne l'ont pas . Une solution de contournement consiste à le remplacer parthis
, comme suggéré dans une autre réponse .Meilleur moyen en utilisant on () avec un chaînage comme,
la source
Les réponses ici ont pris la question du PO trop littéralement. Comment ces réponses peuvent-elles être développées dans un scénario où il y a BEAUCOUP d'éléments enfants, pas seulement une seule
<a>
balise? Voici une façon.Disons que vous avez une galerie de photos avec un arrière-plan noirci et les photos centrées dans le navigateur. Lorsque vous cliquez sur l'arrière-plan noir (mais pas sur rien à l'intérieur), vous souhaitez que la superposition se ferme.
Voici quelques HTML possibles:
Et voici comment le JavaScript fonctionnerait:
Cela arrêtera les événements de clic des éléments à l'intérieur
.contents
de chaque recherche.gallery
afin que la galerie se ferme uniquement lorsque vous cliquez dans la zone d'arrière-plan noir délavé, mais pas lorsque vous cliquez dans la zone de contenu. Cela peut être appliqué à de nombreux scénarios différents.la source
Je suis tombé sur cette question, à la recherche d'une autre réponse.
Je voulais empêcher tous les enfants de déclencher le parent.
JavaScript:
jQuery:
la source
Ou ca:
la source
return false
lien, il doit être cliquable.La solution la plus simple consiste à ajouter ce CSS aux enfants:
la source
Un moyen plus court de le faire:
la source