2010-03-05 4 views
48

Avec jQuery, vous pouvez lier des fonctions à un événement déclenché sur un objet DOM en utilisant .bind() ou l'une des fonctions auxiliaires du gestionnaire d'événements. JQuery doit en quelque sorte stocker cela en interne et je me demande si c'est possible avec 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 désiré pourrait ressembler à ceci :Accès aux fonctions liées aux gestionnaires d'événements avec jQuery

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

Voir cette question: http://stackoverflow.com/questions/2382994/how-to-check-if-any-javascript-event-listeners-handlers-attached-to-an-element-do – Pointy

Répondre

35

Modifier: la méthode ci-dessous fonctionne uniquement dans jQuery < 1,7

Vous pouvez trouver beaucoup de conseils et des astuces dans cet article: Things you may not know about jQuery.

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

Vous pouvez accéder à tous les gestionnaires d'événements liés à un élément (ou tout autre objet) par le stockage des é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! 
+7

Ce n'est plus fonctionne dans jQuery 1.7 et plus récent; voyez la réponse d'Eikes pour la nouvelle manière. – kevingessner

+0

J'ai modifié ma réponse pour refléter cela. Merci – PatrikAkerstrand

+0

Ne fonctionne pas. Essayé '$ (document) .data ('events')' & '$ ('html'). Data ('events')' - sans résultat. – Cody

66

jQuery 1.7 a cessé d'exposer les événements dans la fonction data() régulière. Vous pouvez toujours les obtenir comme ceci:

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

S'il vous plaît noter que cela ne fonctionne que pour les événements qui ont été liés en utilisant jQuery. SELON VOUS, il n'y a aucun moyen de voir tous les événements qui ont été liés en utilisant les fonctions DOM habituelles comme addEventListener.

Vous pouvez cependant les voir dans l'inspecteur webkit: Dans l'onglet Éléments, naviguez jusqu'au noeud DOM souhaité, sur la droite, sélectionnez le menu déroulant "Auditeurs d'événements".

+1

jQuery._data (elem) fonctionne correctement dans la version 1.10.2 – rajakvk