web-dev-qa-db-fra.com

Comment vérifier si des écouteurs / gestionnaires d'événements JavaScript sont attachés à un élément / document?

J'ai essayé de rechercher en ligne, mais il ne semble pas que je puisse formuler correctement la requête de recherche.

Donc, aussi simple que cela puisse paraître, comment puis-je, avec jquery ou simplement javascript, répertorier tous les gestionnaires ou écouteurs d'événements qui sont attachés aux éléments/document/fenêtre ou présents dans dom.

Je me demandais juste.

Merci d'avance.

76
GnrlBzik

Dans jQuery avant la version 1.8, essayez d'utiliser $("#element").data("events")

MODIFIER:

Il y a aussi l'extension jQuery: listHandlers

47
Laimoncijus

Lors du débogage, si vous voulez simplement voir s'il y a un événement, je recommande d'utiliser Visual Event ou la section Elements "des outils de développement de Chrome: sélectionnez un élément et regardez pour "Event Listeners en bas à droite.

Dans votre code, si vous utilisez jQuery avant la version 1.8, vous pouvez utiliser:

$(selector).data("events")

pour obtenir les événements. À partir de la version 1.8, cela est interrompu (voir ce ticket de bug ). Vous pouvez utiliser:

$._data(element, "events")

mais ce n'est pas recommandé car il s'agit d'une structure interne jQuery, et pourrait changer dans les futures versions.

Cette question a des réponses qui peuvent être utiles, mais aucune d'entre elles n'est particulièrement élégante de la même manière que $(selector).data("events").

32
Luke

Sans jQuery:

si les écouteurs ont été ajoutés à l'aide de la méthode elem.addEventListener (), il n'est pas facile de répertorier ces écouteurs. Vous pouvez remplacer la méthode EventTarget.addEventListener () en l'encapsulant avec la vôtre. Ensuite, vous aurez les informations, quels auditeurs ont été enregistrés.

var f = EventTarget.prototype.addEventListener; // store original
EventTarget.prototype.addEventListener = function(type, fn, capture) {
  this.f = f;
  this.f(type, fn, capture); // call original method
  alert('Added Event Listener: on' + type);
}

Exemple de travail que vous pouvez trouver sur http://jsfiddle.net/tomas1000r/RDW7F/

17
Tomas Jakubco

Je viens de découvrir l'événement visuel 2:

http://www.sprymedia.co.uk/article/Visual+Event+2

allez dans la section "rendez-vous" et faites glisser le lien texte vers la barre d'outils de vos signets allez sur une page qui a des événements et cliquez sur le signet

testé dans FF Mac

3
Mark