StopPropagation de jquery ne fonctionne pas comme prévu

Je travaille actuellement sur un enregistreur ui où j'ai parfois absorbé les événements en utilisant stopPropagation de jquery qui est défini comme

stopPropagation: function () { this.isPropagationStopped = K; var a = this.originalEvent; !a || (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0) } 

Par jquery. Je mange l'événement comme

  absorbClick: function(e) { e.stopPropagation(); e.preventDefault(); } 

Et attachez l'événement à tous les éléments par la fonction

  jQuery(frame.document).bind("click", {}, function(e) { e.stopPropagation(); e.preventDefault(); }, true); 

Ce qui est surprenant, c'est que pour certains sites Web, je ne peux pas absorber les événements de clic pendant que certains sites Web sont disponibles. Cela fonctionne correctement.

Le processus ci-dessus ne fonctionne pas fortement sur cet exemple de site Web. Même avant que la fonction absorptionClick ne soit appelée le texte change dans le suivant. Pourquoi suis-je incapable d'absorber l'événement?

 <html> <head> <title>Repro</title> <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> </head> <body> <div id="mydiv">Click me!</div> <script> $('#mydiv').click(function() { $('#mydiv').html("You have clicked me!") }); </script> </body> </html> 

Alors qu'il fonctionne

 <div class="central-featured-lang lang1" lang="en"> <a class="link-box" href="//en.wikipedia.org/" title="English — Wikipedia — The Free Encyclopedia"><strong>English</strong><br> <em>The Free Encyclopedia</em><br> <small>4 479 000+ articles</small> </a> </div> 

Tout le processus ci-dessus fait partie de https://github.com/sebuilder/se-builder/blob/master/seleniumbuilder/chrome/content/html/js/builder/verifyexplorer.js . Je suis en train de résoudre ce problème pour sebuilder.

Le problème est que le gestionnaire d'événements dans l'exemple est exécuté avant que votre gestionnaire d'événement ne soit exécuté, car il est directement lié à l'élément.

Votre gestionnaire d'événements est ajouté à la racine du document, de sorte que ce sera le dernier gestionnaire exécuté pour tout événement.

Si vous souhaitez capturer des événements avant que n'importe quel autre gestionnaire ne soit déclenché, vous devez lier le gestionnaire dans la phase c apture , avec addEventListener :

 document.addEventListener('click', function(event) { event.stopPropagation(); event.preventDefault(); }, true); // <- passing true binds the handler in the capture phase 

JQuery ne vous permet pas de le faire pour des raisons de compatibilité. Les navigateurs IE qui ne supportent pas addEventListener ne prennent pas non plus en charge la liaison dans la phase de capture.