50 votes

Accès aux fonctions liées aux gestionnaires d'événements avec jQuery

Avec jQuery, vous pouvez lier des fonctions à un événement déclenché sur un objet DOM à l'aide de .bind() ou de l'une des fonctions d'assistance du gestionnaire d'événement.

jQuery doit stocker cela en interne d'une manière ou d'une autre et je me demande s'il est possible, étant donné un objet DOM, de savoir quels événements ont été liés à l'objet, et d'accéder à ces fonctions, etc. Le résultat de retour souhaité pourrait ressembler à ceci:

 {
  click: [function1, function2],
  change: [function3],
  blur: [function4, function5, function6]
}
 

69voto

eikes Points 1075

jQuery 1.7 a cessé d'exposer les événements régulièrement dans la fonction data (). Vous pouvez encore le faire comme ceci:

var elem = $('#someid')[0];
var data = jQuery.hasData( elem ) && jQuery._data( elem );
console.log(data.events);

Veuillez noter que cela ne fonctionne que pour les Événements qui ont été liées à l'aide de jQuery. Autant que je sache, vous, il n'est pas possible de voir tous les événements qui ont été liées à l'aide de l'ordinaire DOM fonctions comme la méthode addEventListener.

Vous pouvez les voir dans le webkit inspecteur cependant: Dans l'onglet Éléments de naviguer vers le nœud DOM, sur le côté droit, sélectionnez "Écouteurs d'Événement" déroulant.

35voto

PatrikAkerstrand Points 23968

Edit: la méthode ci-dessous ne fonctionne qu'en jQuery < 1.7

Vous pouvez trouver beaucoup de conseils intéressants et astuces dans cet article: des Choses que vous ne pouvez pas savoir à propos de jQuery.

Il semble que jQuery utiliser data pour stocker des gestionnaires d'événement:

Vous pouvez accéder à tous les gestionnaires d'événements lié à un élément (ou un objet) de jQuery cas de stockage:

// List bound events:
console.dir( jQuery('#elem').data('events') );

// Log ALL handlers for ALL events:
jQuery.each($('#elem').data('events'), function(i, event){
    jQuery.each(event, function(i, handler){
        console.log( handler['handler'].toString() );
    });
});

// You can see the actual functions which will occur
// on certain events; great for debugging!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X