2009-09-14 9 views
6

Poszukuję zaktualizowanej odpowiedzi na this question.: Jak znaleźć detektory zdarzeń w węźle DOM w prototypie?

Wygląda na to, że Event.observers nie jest już używany (może w celu uniknięcia wycieków pamięci) w Prototype 1.6+, więc jak mogę teraz wyśledzić, które detektory zdarzeń są dołączone do elementu?

Wiem, że Firebug ma przycisk "break on next", ale na elemencie body znajduje się kilka detektorów myszy, które wykonują, zanim dojdę do zachowania, które chcę na innym konkretnym elemencie, więc czy jest jakiś inny sposób?

Odpowiedz

7

Zaktualizowałem odpowiedź you linked to z bardziej kompleksowym Prototype pokryciem rozliczenia zmian w wersjach 1.6.0 na 1.6.1.

Zrobiło się bardzo plączą w między tam, ale 1.6.1 jest nieco czyste:

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 za aktualizację drugiej odpowiedzi! Jestem pewien, że pomoże to innym, którzy znaleźli to, co zrobiłem przez google. –

6

Rzeczy są teraz kierowane przez element magazynujący:)

Element.getStorage(yourElement).get('prototype_event_registry') daje instancję prototypu Hash, więc można zrobić wszystko, co byś zrobił hash.

// 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. 

Należy pamiętać, że są to nielegalni szczegóły wewnętrzne które mogą być zmienione w przyszłości, więc nie polegać na nich z wyjątkiem, być może, celów debugowania.

+0

+1 Thx, kangax. Chociaż byłeś pierwszy, półksiężyc dał pełniejszą odpowiedź z wersją 1.6.0.X, której potrzebowałem. –