2010-03-05 4 views
48

Mit jQuery können Sie Funktionen an ein Ereignis binden, das an einem DOM-Objekt ausgelöst wurde. Verwenden Sie dazu .bind() oder eine der Event-Handler-Hilfsfunktionen.Auf Funktionen zugreifen, die mit jQuery an Ereignisbehandlungsroutinen gebunden sind

jQuery muss dies intern irgendwie speichern und ich frage mich, ob es möglich ist, bei einem DOM-Objekt herauszufinden, welche Ereignisse an das Objekt gebunden wurden und auf diese Funktionen usw. zugreifen. Das gewünschte Ergebnis könnte in etwa so aussehen :

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

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

Antwort

35

bearbeiten: das Verfahren nur in jQuery unten arbeitet < 1,7

Sie viele interessante Tipps und Tricks in diesem Artikel finden: Things you may not know about jQuery.

Es scheint, dass jQuery data Event-Handler speichern verwendet:

Sie Zugriff auf alle Event-Handler gebunden an ein Element (oder ein beliebiges Objekt) durch jQuery Ereignisspeicher:

// 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

Dies nicht mehr Arbeitet in jQuery 1.7 und neuer; Siehe Eikes 'Antwort für den neuen Weg. – kevingessner

+0

Ich habe meine Antwort bearbeitet, um dies zu reflektieren. Danke – PatrikAkerstrand

+0

Nicht funktioniert. Versuchte '$ (document) .data ('events')' & '$ ('html'). Data ('events')' - kein Erfolg. – Cody

66

jQuery 1.7 hat die Darstellung der Ereignisse in der regulären Funktion data() beendet. Sie können immer noch sie wie diese:

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

Bitte beachten Sie, dass dies nur für Events arbeitet, die jQuery gebunden worden sein. AFAIK gibt es keine Möglichkeit, alle Ereignisse zu sehen, die mit den regulären DOM-Funktionen wie addEventListener gebunden wurden.

Sie können sie jedoch im webkit inspector sehen: Navigieren Sie auf der Registerkarte Elemente zum gewünschten DOM-Knoten, wählen Sie auf der rechten Seite das Listenfeld "Event Listeners".

+1

jQuery._data (elem) funktioniert gut in Version 1.10.2 – rajakvk

Verwandte Themen