Je suis conscient que les appels en direct jaillissent à travers le document et c’est pourquoi j’ai des problèmes.
Malheureusement, j’utilise des bibliothèques tierces qui lient des éléments et j’aimerais créer un scénario dans lequel aucun événement de clic ne sera diffusé jusqu’à ces éléments.
L’utilisation de .click () en combinaison avec eventStopPropogation fonctionne très bien, mais en raison de la nature dynamic du contenu, je dois utiliser soit en direct, soit en mode délégué, etc. Je dois empêcher le clic “externe” de se déclencher lorsque je clique sur le div “interne”. Je ne peux pas changer le gestionnaire “externe”.
Merci d’avance pour votre aide!!
http://jsfiddle.net/99zQM/2/
HTML:
outer inner
Javascript:
$("#outer").bind('click',function(e){ alert("outer clicked"); }); $("#inner").live('click',function(e){ alert("inner clicked"); });
utilisez on
délégué lié à outer
et appelez e.stopPropagation()
dans inner
gestionnaire de cliquetis inner
.. cela devrait être le truc.
essayez cette mise à jour
$("#outer").bind('click',function(e){ alert("outer clicked"); }); $('#outer').on('click',"#inner",function(e){ e.stopPropagation(); alert("inner clicked"); });
violon mis à jour ici
Comme vous l’avez déjà fait remarquer, la délégation d’événements repose sur la propagation d’événements et l’utilisation d’un élément statique. Le problème est compliqué car il n’y a rien entre les éléments
et
, mais nous pouvons contourner ce problème.
Configurez un gestionnaire d’événements dynamic pour les événements de click
sur l’élément #inner
lié à #outer
et appelez event.stopImmediatePropagation()
pour empêcher d’autres gestionnaires d’événements d’être exécutés. L’inconvénient est que cela dépend de l’ordre dans lequel les gestionnaires d’événements sont liés. Votre gestionnaire d’événements délégué pour #inner
doit donc être lié avant votre gestionnaire d’événements statiques pour #outer
.
$('#outer').on('click', '#inner', function(e) { console.log('inner'); e.stopImmediatePropagation(); }).click(function(e) { console.log('outer'); });
Jetez un oeil à cette démo de jsFiddle .
U peut utiliser
$("#outer").bind('click',function(e){ alert("outer clicked"); }); $('#outer').on('click',"#inner",function(e){ e.stopImmediatePropagation(); alert("inner clicked"); });