2014-11-10 12 views
5

Einige der Drittanbieter-Plugin wird die eventListener auf der Website anhängen. Wie entferne ich den eventListener, ohne die angefügte Funktion zu kennen?removeEventListener ohne die Funktion zu kennen

Ich beziehe mich auf removeEventListener, aber ich kann keine Ahnung bekommen, um dies zu entfernen.

ZB: getEventListeners(window) zeigt die Ereignisse an. Aber wenn ich versuche, das Ereignis mit window.removeEventListener("eventname") zu entfernen, funktioniert nicht, ohne diese Funktion zu kennen.

Bitte helfen Sie, Vielen Dank im Voraus.

Antwort

7

getEventListeners(window) wird eine Karte der Ereignisse und ihrer registrierten Ereignislistener zurückgeben.

So für DOMContentLoaded Ereignis zum Beispiel können Sie viele Event-Listener haben. Wenn Sie den Index des Zuhörers wissen Sie entfernen möchten (oder wenn nur eine vorhanden ist), können Sie tun:

var eventlistener = getEventListeners(window)["DOMContentLoaded"][index]; 
window.removeEventListener("DOMContentLoaded", 
          eventlistener.listener, 
          eventlistener.useCapture); 
+0

Noch bequemer, weil es auch die Deregistrierungsfunktion 'remove' zurückgibt:' getEventListeners (window) .DOMContentLoaded [0] .remove() '. – dfsq

+0

@dfsq, 'chrome' ja, aber nicht' firefox'. (kann nicht für ie testen). – manji

+0

@manji Danke Kumpel. Es funktioniert in Chrom. – Dineshkani

4

Leider können Sie das nicht tun. Sie benötigen, um einen Verweis auf die Ereignishandler-Funktion zu haben, um es durch zu entfernen.

Ihre einzige Option, wenn Sie diese Referenz nicht erhalten, wäre, indem Sie das Node vollständig ersetzen.

+0

JANDY ist es eine Möglichkeit, dass der Bezug über Jquery oder Javascript zu bekommen. Da dieses Ereignis von Drittparteien hinzugefügt wird und dieses Ereignis im Fensterelement – Dineshkani

+0

@Dineshkani AFAIK angehängt ist, gibt es das nicht (aber hoffentlich korrigiert mich ein Ninja hier, wenn ich falsch liege). Nativ hinzugefügte Ereignisse über 'addEventListener' werden nirgendwo gespeichert, auf die JavaScript zugreifen kann. – jAndy

+0

Vielen Dank für Ihre Antwort @jAndy – Dineshkani

Verwandte Themen