Vollständig funktionierende Lösung auf der Grundlage von Antwort von Jan Turon - verhält sich wie getEventListeners()
von der Konsole aus:
(Es gibt einen kleinen Fehler mit Duplikaten, der aber nicht viel kaputt macht).
(function() {
Element.prototype._addEventListener = Element.prototype.addEventListener;
Element.prototype.addEventListener = function(a,b,c) {
if(c==undefined)
c=false;
this._addEventListener(a,b,c);
if(!this.eventListenerList)
this.eventListenerList = {};
if(!this.eventListenerList[a])
this.eventListenerList[a] = [];
//this.removeEventListener(a,b,c); // TODO - handle duplicates..
this.eventListenerList[a].push({listener:b,useCapture:c});
};
Element.prototype.getEventListeners = function(a){
if(!this.eventListenerList)
this.eventListenerList = {};
if(a==undefined)
return this.eventListenerList;
return this.eventListenerList[a];
};
Element.prototype.clearEventListeners = function(a){
if(!this.eventListenerList)
this.eventListenerList = {};
if(a==undefined){
for(var x in (this.getEventListeners())) this.clearEventListeners(x);
return;
}
var el = this.getEventListeners(a);
if(el==undefined)
return;
for(var i = el.length - 1; i >= 0; --i) {
var ev = el[i];
this.removeEventListener(a, ev.listener, ev.useCapture);
}
};
Element.prototype._removeEventListener = Element.prototype.removeEventListener;
Element.prototype.removeEventListener = function(a,b,c) {
if(c==undefined)
c=false;
this._removeEventListener(a,b,c);
if(!this.eventListenerList)
this.eventListenerList = {};
if(!this.eventListenerList[a])
this.eventListenerList[a] = [];
// Find the event in the list
for(var i=0;i<this.eventListenerList[a].length;i++){
if(this.eventListenerList[a][i].listener==b, this.eventListenerList[a][i].useCapture==c){ // Hmm..
this.eventListenerList[a].splice(i, 1);
break;
}
}
if(this.eventListenerList[a].length==0)
delete this.eventListenerList[a];
};
})();
Verwendung:
someElement.getEventListeners([name])
- Rückgabe der Liste der Ereignis-Listener, wenn Name gesetzt ist, Rückgabe des Arrays der Listener für dieses Ereignis
someElement.clearEventListeners([name])
- alle Ereignis-Listener entfernen, wenn Name gesetzt ist, nur Listener für dieses Ereignis entfernen
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