Es hängt davon ab, wie die Ereignisse angehängt sind. Zur Veranschaulichung nehmen wir an, wir haben den folgenden Click-Handler:
var handler = function() { alert('clicked!') };
Wir werden sie mit verschiedenen Methoden an unserem Element anbringen, von denen einige eine Überprüfung erlauben und andere nicht.
Methode A) Einzelner Ereignisbehandler
element.onclick = handler;
// inspect
console.log(element.onclick); // "function() { alert('clicked!') }"
Methode B) mehrere Ereignisbehandler
if(element.addEventListener) { // DOM standard
element.addEventListener('click', handler, false)
} else if(element.attachEvent) { // IE
element.attachEvent('onclick', handler)
}
// cannot inspect element to find handlers
Methode C): jQuery
$(element).click(handler);
-
1.3.x
// inspect
var clickEvents = $(element).data("events").click;
jQuery.each(clickEvents, function(key, value) {
console.log(value) // "function() { alert('clicked!') }"
})
-
1.4.x (speichert den Handler innerhalb eines Objekts)
// inspect
var clickEvents = $(element).data("events").click;
jQuery.each(clickEvents, function(key, handlerObj) {
console.log(handlerObj.handler) // "function() { alert('clicked!') }"
// also available: handlerObj.type, handlerObj.namespace
})
-
1.7+ (sehr gut)
Hergestellt unter Verwendung von Wissen aus dieser Kommentar .
events = $._data(this, 'events');
for (type in events) {
events[type].forEach(function (event) {
console.log(event['handler']);
});
}
(Siehe jQuery.fn.data
y jQuery.data
)
Methode D): Prototyp (unordentlich)
$(element).observe('click', handler);
-
1.5.x
// inspect
Event.observers.each(function(item) {
if(item[0] == element) {
console.log(item[2]) // "function() { alert('clicked!') }"
}
})
-
1.6 bis einschließlich 1.6.0.3 (hier wurde es sehr schwierig)
// inspect. "_eventId" is for < 1.6.0.3 while
// "_prototypeEventID" was introduced in 1.6.0.3
var clickEvents = Event.cache[element._eventId || (element._prototypeEventID || [])[0]].click;
clickEvents.each(function(wrapper){
console.log(wrapper.handler) // "function() { alert('clicked!') }"
})
-
1.6.1 (etwas besser)
// inspect
var clickEvents = element.getStorage().get('prototype_event_registry').get('click');
clickEvents.each(function(wrapper){
console.log(wrapper.handler) // "function() { alert('clicked!') }"
})
Wenn Sie auf die resultierende Ausgabe in der Konsole klicken (die den Text der Funktion anzeigt), navigiert die Konsole direkt zu der Zeile der Funktionsdeklaration in der entsprechenden JS-Datei.
4 Stimmen
Wie werden die Ereignisse überhaupt miteinander verbunden? Verwenden Sie eine Bibliothek (z. B. Prototype, jQuery, etc.)?
0 Stimmen
Es ist wichtig zu beachten, dass mehrere Callback-Funktionen für denselben Ereignistyp über
element.addEventListener(type, callback, [bubble])
, währendelement.onclick = function
wird bei jeder Zuweisung überschrieben.6 Stimmen
Ruft alle Ereignisse neben ihrem jeweiligen Element ab:
Array.from(document.querySelectorAll("*")).forEach(e => { const ev = getEventListeners(e); if (Object.keys(ev).length !== 0) {console.log(e, ev)} })
0 Stimmen
Sie können die
addEventListener
und erfassen eine Liste aller Zuhörer im DOM-Element. Hier ein Beispielcode stackoverflow.com/a/64484951/1812732