2009-09-14 3 views
6

Ich bin auf der Suche nach einer aktualisierten Antwort auf this question.Update: Wie finden Ereignis-Listener auf einem DOM-Knoten im Prototyp?

Es scheint, dass Event.observers in Prototype 1.6+ nicht mehr verwendet wird (vielleicht um Speicherlecks zu vermeiden). Wie kann ich nun herausfinden, welche Ereignislistener an ein Element angehängt sind?

Ich weiß, Firebug hat eine Schaltfläche "Weiter", aber es gibt mehrere Maus-Listener auf das Body-Element, die ausgeführt werden, bevor ich das Verhalten, das ich auf einem anderen bestimmten Element will, bekommen kann, gibt es andere Weise?

Antwort

7

Ich habe die Antwort you linked to mit umfassender Prototype Berichterstattung über Änderungen in den Versionen 1.6.0 zu 1.6.1 aktualisieren.

Es wurde sehr chaotisch dazwischen gibt, aber 1.6.1 ist etwas sauber:

var handler = function() { alert('clicked!') }; 
$(element).observe('click', handler); 

// inspect 
var clickEvents = element.getStorage().get('prototype_event_registry').get('click'); 
clickEvents.each(function(wrapper){ 
    alert(wrapper.handler) // alerts "function() { alert('clicked!') }" 
}) 
+0

Thx für die Aktualisierung der anderen Antwort auch! Ich bin mir sicher, dass es anderen helfen wird, die es gefunden haben, wie ich es über Google getan habe. –

6

Die Dinge sind jetzt durch Elementspeicher geleitet:)

Element.getStorage(yourElement).get('prototype_event_registry') Sie Hash, eine Instanz von Prototype geben, so dass Sie kann alles, was Sie mit Hash tun würde.

// to see which event types are being observed 
Element.getStorage(yourElement).get('prototype_event_registry').keys(); 

// to get array of handlers for particular event type 
Element.getStorage(yourElement).get('prototype_event_registry').get('click'); 

// to get array of all handlers 
Element.getStorage(yourElement).get('prototype_event_registry').values(); 

// etc. 

Beachten Sie, dass diese sind nicht dokumentierte interne Details, die in Zukunft geändert werden könnte, so würde ich nicht auf sie verlassen, mit Ausnahme vielleicht Debug-Zwecke.

+0

+1 Thx, kangax. Obwohl Sie der Erste waren, gab Crescentfish mit der Version 1.6.0.X, die ich brauchte, eine vollständigere Antwort. –

Verwandte Themen