Wie finden Sie Ereignis-Listener auf einem DOM-Knoten beim Debuggen oder aus dem JavaScript-Code?
Habe ich eine Seite gefunden, wo einige Ereignis-Listener angehängt werden, um Sie Eingabefelder und Auswahlfelder. Gibt es eine Möglichkeit, um herauszufinden, welche Ereignis-Listener Beachtung einer bestimmten DOM-Knoten und für welche Veranstaltung?
Veranstaltungen sind angebracht Verwendung:
- Prototyp
Event.observe
; - DOM
addEventListener
; - Als element Attribut
element.onclick
.
InformationsquelleAutor der Frage Navneet | 2009-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen nur zu überprüfen, was auf einer Seite, könnten Sie versuchen, die Visual Event bookmarklet.
Update: Visual Event 2 verfügbar;
InformationsquelleAutor der Antwort Andrew Hedges
Es hängt davon ab, wie die Ereignisse verbunden sind. Zur Veranschaulichung nehme wir haben die folgenden click-handler:
Wir gehen, zu befestigen Sie es an unserem element, mit unterschiedlichen Methoden, von denen einige erlauben die Inspektion und einige, die nicht.
Methode A) single event-handler
Methode B) mehrere event-Handler
Methode C): jQuery
1.3.x
1.4.x (speichert die handler innerhalb eines Objekts)
(Siehe
jQuery.fn.data
undjQuery.data
)Methode D): Prototyp (messy)
1.5.x
1,6 bis 1.6.0.3, inklusive (sehr schwierig hier)
1.6.1 (etwas besser)
InformationsquelleAutor der Antwort Crescent Fresh
Chrome, Firefox, Vivaldi und Safari unterstützen
getEventListeners(domElement)
die in Ihrer Entwickler-Tools console.Für die Mehrheit der debugging-Zwecke diese verwendet werden könnten.
Unten ist eine sehr gute Referenz zu verwenden:
https://developers.google.com/chrome-developer-tools/docs/commandline-api#geteventlistenersobject
InformationsquelleAutor der Antwort Raghav
WebKit Inspector in Chrome oder Safari-Browser jetzt tut. Es zeigt die Ereignis-Listener für ein DOM-element, wenn Sie es auswählen, in den Elemente-Bereich.
InformationsquelleAutor der Antwort Ishan
Ist es möglich, alle Ereignis-Listener in JavaScript: Es ist nicht schwer, man muss nur hacken die
prototype
's Methode der HTML-Elemente (vor hinzufügen des listeners).Nun jedes anchor-element (
a
)lastListenerInfo
Eigenschaft wich enthält alle seine Zuhörer. Und es funktioniert sogar für das entfernen von Listenern mit anonymen Funktionen.InformationsquelleAutor der Antwort Ivan Castellanos
(Umschreiben die Antwort von diese Frage da es hier relevant.)
Beim Debuggen, wenn Sie nur wollen, um zu sehen, die events, die ich empfehlen entweder...
Wenn Sie möchten, verwenden Sie die Ereignisse in Ihrem code, und Sie sind mit jQuery vor version 1.8die Sie verwenden können:
Ereignisse. Ab version 1.8 verwenden .Daten("Ereignisse") ist eingestellt (siehe dieser bug ticket). Sie verwenden können:
Weiteres Beispiel: Schreiben Sie alle click-events auf einem bestimmten link zu der Konsole:
(siehe http://jsfiddle.net/HmsQC/ für ein Beispiel)
Leider mit $._data dies wird nicht empfohlen, außer zum Debuggen, da es sich um eine interne jQuery-Struktur, und könnte sich in zukünftigen Versionen ändern. Leider kenne ich keine anderen einfachen Mittel der Zugriff auf die Ereignisse.
InformationsquelleAutor der Antwort Luke
Verwenden getEventListeners in Google Chrome:
InformationsquelleAutor der Antwort Pranay Soni
1:
Prototype.observe
Element verwendet.addEventListener (siehe der Quellcode)2: können Sie überschreiben
Element.addEventListener
zu erinnern, die zusätzlichen Hörer (praktische EigenschaftEventListenerList
war entfernt von DOM3 spec-Vorschlag). Führen Sie diesen code vor jedem Fall angebracht ist:Lesen Sie alle Veranstaltungen von:
Und vergessen Sie nicht, überschreiben
Element.removeEventListener
entfernen Sie die Falle aus dem benutzerdefiniertenElement.eventListenerList
.3:
Element.onclick
Eigenschaft benötigt eine Besondere Pflege-hier:4: vergessen Sie nicht die
Element.onclick
content-Attribut: dies sind zwei verschiedene Dinge:So müssen Sie es zu handhaben, zu:
Visual Event-bookmarklet (erwähnt in der beliebteste Antwort) nur Stiehlt die benutzerdefinierte Bibliothek von handler-cache:
Element überschreiben kann ist fraglich (d.h., da gibt es einige DOM-spezifische Funktionen wie live-Kollektionen, die nicht codiert werden, in JS), aber es gibt die eventListenerList nativ unterstützen und es funktioniert in Chrome, Firefox und Opera (funktioniert nicht im IE7).
InformationsquelleAutor der Antwort Jan Turoň
Könnten Sie wickeln den systemeigenen DOM-Methoden für die Verwaltung der Ereignis-Listener, indem Sie diese an der Spitze Ihrer
<head>
:H/T @les2
InformationsquelleAutor der Antwort Jon z
Den Firefox developer tools jetzt tut. Ereignisse werden angezeigt, indem Sie auf die "ev" - Taste auf der rechten Seite jedes Elements anzuzeigen, einschließlich jQuery und DOM Veranstaltungen.
InformationsquelleAutor der Antwort simonzack
Wenn Sie Firebugdie Sie verwenden können
console.dir(object or array)
zu drucken, einem schönen Baum in der Konsole des JavaScript-Skalar, array oder object.Versuchen:
oder
InformationsquelleAutor der Antwort Michael Butler
Opera 12 (nicht die neueste Chrome Webkit-engine basiert) Dragonfly hatte dieses für eine Weile und ist natürlich angezeigt, in der DOM-Struktur. Meiner Meinung nach ist es ein superior-debugger und das ist der einzige Grund, übrigen, warum ich immer noch mit Opera 12 version (es gibt keine v13, v14-version und die v15 Webkit-basierten fehlt Libelle noch)
InformationsquelleAutor der Antwort Daniel Sokolowski
Voll funktionierende Lösung basiert auf Antwort von Jan Turon - verhält sich wie
getEventListeners()
von der Konsole:(Es gibt einen kleinen bug mit dem Duplikaten. Es bricht nicht viel jedenfalls.)
Verwendung:
someElement.getEventListeners([name])
- return Liste der Ereignis-Listener, wenn der name gesetzt ist return array von Listener für dieses EreignissomeElement.clearEventListeners([name])
- entfernen Sie alle Ereignis-Listener, wenn der name gesetzt ist, nur entfernen Sie Listener für das EreignisInformationsquelleAutor der Antwort n00b
Prototyp 1.7.1 Weg
InformationsquelleAutor der Antwort Ronald Lewis Berner II
Gibt es schöne jQuery Events-Erweiterung :
(Thema Quelle)
InformationsquelleAutor der Antwort T.Todua
War ich vor kurzem die Arbeit mit Ereignissen und wollten view/control alle Ereignisse auf einer Seite. Angeschaut möglichen Lösungen, habe ich beschlossen, zu gehen meine eigene Weise, und erstellen Sie eine benutzerdefinierte system-monitor-Ereignisse. Also, ich habe drei Dinge.
Erste, ich brauchte ein container für alle Ereignis-Listener in die Seite: das ist die
EventListeners
Objekt. Es hat drei nützliche Methoden:add()
remove()
undget()
.Als Nächstes erstellte ich eine
EventListener
Objekt, um zu halten die notwendigen Informationen für die Veranstaltung, d.h.:target
type
callback
options
useCapture
wantsUntrusted
und fügte hinzu, eine Methoderemove()
um den listener entfernen.Schließlich erweiterte ich die native
addEventListener()
undremoveEventListener()
Methoden, um Ihnen die Arbeit mit den Objekten, die ich erstellt habe (EventListener
undEventListeners
).Verwendung:
addEventListener()
schafft eineEventListener
- Objekt, fügt es zuEventListeners
und gibt dieEventListener
Objekt, so kann es später entfernt werden.EventListeners.get()
können verwendet werden, um die Zuhörer in die Seite. Es akzeptiert eineEventTarget
oder ein string (Ereignis-Typ).Demo
Sagen wir, wir wollen wissen, jedes Ereignis-listener in diesem aktuellen Seite. Wir können es tun (vorausgesetzt, Sie verwenden ein Skript-manager-Erweiterung Tampermonkey in diesem Fall). Folgende Skript tut dies:
Und wenn wir eine Liste aller, die Zuhörer, es sagt, es gibt 299 Ereignis-Listener. Es "scheint" zu sein, einige Dubletten, aber ich weiß nicht, ob Sie wirklich dupliziert. Nicht jeder event-Typ wird dupliziert, so dass all diese "Duplikate" könnten die einzelnen Hörers.
Code finden Sie in meinem repository. ich wollte nicht, dass es hier zu posten, weil es ziemlich lang ist.
Update: Dies scheint nicht zu funktionieren mit jQuery. Wenn ich das untersuchen der EventListener, sehe ich, dass der Rückruf
Ich glaube, das gehört zu jQuery, und ist nicht die eigentliche callback. jQuery speichert die eigentlichen callback-in den Eigenschaften der EventTarget:
Entfernen Sie einen Ereignis-listener, der eigentliche callback übergeben werden muss, um die
removeEventListener()
Methode. Also, um diese Arbeit zu machen mit jQuery, es Bedarf einer weiteren Modifikation. Könnte ich lösen, in die Zukunft.InformationsquelleAutor der Antwort akinuri