J'ai un DIV avec une classe foobar
, et quelques DIV à l'intérieur de cette DIV qui ne sont pas classés, mais je suppose qu'ils héritent de la foobar
classe:
$('.foobar').on('click', function() { /*...do stuff...*/ });
Je veux que cela ne se déclenche qu'en cliquant quelque part dans le DIV mais pas sur ses DIVs enfants.
===
ou!==
utilise le "Strict Equality Comparison Algorithm" , tandis que le==
et!=
utilise le "Abstract Equality Comparison Algorithm" , qui est de type coercitif. La sagesse générale est de toujours utiliser une comparaison stricte, sauf s'il existe un besoin spécifique pour le type coercitif (car ses règles sont un peu complexes) . Dans ce cas, parce que les objets sont comparés, cela ne fait vraiment aucune différence, mais vous constaterez que la plupart des gens resteront fidèles à la comparaison stricte .Il existe une autre méthode qui fonctionne si cela ne vous dérange pas de cibler uniquement les nouveaux navigateurs. Ajoutez simplement le CSS
à tous les enfants du div que vous souhaitez capturer le clic. Voici les tables de support
http://caniuse.com/#feat=pointer-events
la source
click
déclencheur d'événement de clic programmé doit être bloqué?Vous pouvez utiliser le bullage en votre faveur:
la source
<a>
éléments descendants . Il n'y a qu'un seul problème: lorsque je clique au milieu sur eux, l'événement se déclenche toujours (testé dans Google Chrome). Existe-t-il une variante de cela qui empêche également cela?Je n'ai pas obtenu la réponse acceptée au travail, mais cela semble faire l'affaire, au moins dans la vanille JS.
la source
this
car l'objet quithis
pointe peut changer en fonction de la portée et du contexte d'où il est appeléCela arrêtera la propagation (propagation) de l'
click
événement sur l'un des éléments enfants de l'élément ou des.foobar
éléments afin que l'événement n'atteigne pas le.foobar
éléments pour déclencher leur ou leurs gestionnaires d'événements.Voici une démo: http://jsfiddle.net/bQQJP/
la source
la source
J'ai eu le même problème et j'ai trouvé cette solution (basée sur les autres réponses)
Fondamentalement, il dit que si la cible est le div, exécutez le code, sinon ne faites rien (ne le cachez pas)
la source
Mon cas est similaire mais c'est l'occasion où vous en avez peu
foobar
-s et que vous ne souhaitez fermer qu'un seul - par un clic:Trouver le cas parent
Trouver un enfant
la source
Vous pouvez utiliser event.currentTarget. Il ne cliquera que sur l'événement qui a reçu l'événement.
la source
Si vous ne pouvez pas utiliser
pointer-events: none;
et ciblez des navigateurs modernes, vous pouvez utilisercomposedPath
pour détecter un clic direct sur l'objet comme ceci:Vous pouvez en savoir plus sur compoundPath ici: https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
la source
la source