2009-09-14 17 views
6

Sto cercando una risposta aggiornata a this question.: come trovare i listener di eventi su un nodo DOM in prototipo?

Sembra che Event.observers non sia più utilizzato (forse per evitare perdite di memoria) in Prototype 1.6+, quindi come faccio a rintracciare ora quali ascoltatori di eventi sono collegati a un elemento?

So che Firebug ha un pulsante "interrompi il prossimo", ma ci sono diversi listener del mouse sull'elemento del corpo che vengono eseguiti prima che io possa arrivare al comportamento che voglio su un altro elemento particolare, quindi c'è un altro modo?

risposta

7

Ho aggiornato la risposta you linked to con una copertura di copertura più completa Prototype per le modifiche nelle versioni 1.6.0 a 1.6.1.

Ha ottenuto molto disordinato in mezzo là, ma 1.6.1 è un po 'pulito:

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 per aggiornare anche l'altra risposta! Sono sicuro che aiuterà gli altri a trovarlo come ho fatto tramite Google. –

6

Le cose ora sono instradati attraverso l'elemento di storage:)

Element.getStorage(yourElement).get('prototype_event_registry') vi darà un esempio di prototipo di Hash, in modo da poter fare tutto ciò che si farebbe con 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. 

Nota che questi sono dettagli interni privi di documenti che possono essere modificate in futuro, quindi non mi contare su di loro tranne, forse, il debugging.

+0

+1 Thx, kangax. Sebbene tu fossi il primo, il pesce mezzaluna fornì una risposta più completa con la versione 1.6.0.X di cui avevo bisogno. –