2009-09-14 4 views
6

Je suis à la recherche d'une réponse mise à jour à this question.Mise à jour: Comment trouver les écouteurs d'événement sur un noeud DOM en prototype?

Il semble que Event.observers n'est plus utilisé (peut-être pour éviter les fuites de mémoire) dans Prototype 1.6+, alors comment puis-je savoir quels écouteurs d'événements sont attachés à un élément? Je sais que Firebug a un bouton "break on next", mais il y a plusieurs écouteurs de souris sur l'élément body qui s'exécutent avant que je puisse obtenir le comportement que je veux sur un autre élément particulier, y a-t-il un autre moyen?

Répondre

7

J'ai mis à jour la réponse you linked to avec la comptabilité de couverture Prototype plus complète pour les changements dans les versions 1.6.0 à 1.6.1.

Il a obtenu très salissant entre là, mais 1.6.1 est un peu propre:

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 pour mettre à jour l'autre réponse, aussi! Je suis sûr que ça va aider les autres qui l'ont trouvé comme je l'ai fait par google. –

6

Les choses sont acheminées par le stockage des éléments:)

Element.getStorage(yourElement).get('prototype_event_registry') vous donnera une instance de Prototype de Hash, de sorte que vous pouvez faire tout ce que vous feriez avec hachage.

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

Notez que ce sont des détails internes en situation irrégulière qui pourraient être modifiés à l'avenir, donc je ne compter sur eux à l'exception, peut-être, à des fins de débogage.

+0

+1 Thx, kangax. Bien que vous ayez été le premier, Crescentfish a donné une réponse plus complète avec la version 1.6.0.X dont j'avais besoin. –

Questions connexes