web-dev-qa-db-fra.com

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 en utilisant .bind() ou l'une des fonctions d'assistance du gestionnaire d'événements.

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, d'accéder à ces fonctions, etc. Le résultat de retour souhaité pourrait ressembler à ceci:

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

Edit : la méthode ci-dessous ne fonctionne que dans jQuery <1.7

Vous pouvez trouver beaucoup de trucs et astuces intéressants dans cet article: Ce que vous ne savez peut-être pas sur jQuery .

Il semble que jQuery utilise data pour stocker les gestionnaires d'événements:

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

// 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!
35
PatrikAkerstrand

jQuery 1.7 a cessé d'exposer les événements dans la fonction régulière data (). Vous pouvez toujours les obtenir 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 liés à l'aide de jQuery. AFAIK vous il n'y a aucun moyen de voir tous les événements qui ont été liés en utilisant les fonctions DOM régulières comme addEventListener.

Vous pouvez cependant les voir dans l'inspecteur du kit Web: Dans l'onglet Éléments, accédez au nœud DOM souhaité, sur le côté droit, sélectionnez la liste déroulante "Écouteurs d'événements".

67
eikes