Incendie uniquement lorsque vous cliquez sur un élément et non sur ses enfants

Si je lie un gestionnaire de click à l’élément body , l’événement est déclenché lorsque je clique sur un élément quelconque de la page. Je peux vérifier l’ event.target à chaque clic:

 $("body").on("click", function(event) { if (event.target.tagName == "BODY") { ... } }); 

mais cela semble un peu exagéré. Existe-t-il un moyen de déclencher l’événement uniquement en cliquant sur la zone vide du corps lui-même?

Vous pouvez utiliser la propriété eventPhase de event. Une valeur de 2 signifie que l’événement déclenche actuellement l’élément cible:

 $("body").on("click", function(event) { //Cancel if not at target if (event.eventPhase != 2) return; //Other Code Here }); 

Fiddle Here: http://jsfiddle.net/o0yptmmp/

Vous pouvez le faire si vous vérifiez à chaque clic si l’élément sur lequel vous cliquez a un corps parent. Si la condition est fausse, vous cliquez sur le corps:

 $("body").on("click", function(event) { if ($(this).parents('body').length == 0) { //Do something } }); 

À mon avis, ce n’est pas une bonne pratique, mais cela dépend de votre code et de votre projet.

J’espère que ça aide.

À votre santé.

Vous devriez mettre un

 event.stopPropagation() 

sur tous les enfants que vous voulez ne pas bubble .

jQuery Docs: http://api.jquery.com/event.stoppropagation/ .