Update: Como encontrar ouvintes de eventos em um nó DOM em protótipo?
-
07-07-2019 - |
Pergunta
Eu estou procurando uma resposta actualizada para esta pergunta .
Parece que Event.observers não é mais utilizado (talvez para evitar vazamentos de memória) em Prototype 1.6+, assim como faço para rastrear agora o que os ouvintes de eventos estão ligados a um elemento?
Eu sei Firebug tem uma "pausa na próxima" botão, mas existem vários ouvintes do mouse sobre o elemento de corpo que execute antes que eu possa chegar ao comportamento que eu quero em um outro elemento em particular, então há alguma outra maneira?
Solução
Eu tenho atualizar a resposta ligado a você com cobertura Prototype
mais abrangente contabilização de alterações nas versões 1.6.0
para 1.6.1
.
Ele ficou muito confuso entre lá, mas 1.6.1 é um pouco limpo:
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!') }"
})
Outras dicas
As coisas estão agora encaminhado através de armazenamento Elemento:)
Element.getStorage(yourElement).get('prototype_event_registry')
lhe dará uma instância de Hash
de Prototype, para que você possa fazer qualquer coisa que você faria com 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.
Note que estes são detalhes sem documentos internos , que pode ser alterado no futuro, então eu não iria contar com eles, exceto para, talvez, fins de depuração.