Javascript 更新:如何在prototype中的DOM节点上查找事件侦听器?
我正在寻找最新的答案 在Prototype 1.6+中,似乎不再使用Event.observators(可能是为了避免内存泄漏),那么现在我如何跟踪将哪些事件侦听器附加到元素Javascript 更新:如何在prototype中的DOM节点上查找事件侦听器?,javascript,events,prototypejs,listener,observer-pattern,Javascript,Events,Prototypejs,Listener,Observer Pattern,我正在寻找最新的答案 在Prototype 1.6+中,似乎不再使用Event.observators(可能是为了避免内存泄漏),那么现在我如何跟踪将哪些事件侦听器附加到元素 我知道Firebug有一个“下一步中断”按钮,但是body元素上有几个鼠标侦听器,在我能够获得我想要在另一个特定元素上的行为之前执行,那么还有其他方法吗?现在通过元素存储路由:) Element.getStorage(yourElement.get('prototype\u event\u registry')将为您提供p
我知道Firebug有一个“下一步中断”按钮,但是body元素上有几个鼠标侦听器,在我能够获得我想要在另一个特定元素上的行为之前执行,那么还有其他方法吗?现在通过元素存储路由:)
Element.getStorage(yourElement.get('prototype\u event\u registry')
将为您提供prototype的哈希的实例,因此您可以使用哈希执行任何操作
// 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.
请注意,这些是未记录的内部详细信息,将来可能会更改,因此除了调试目的之外,我不会依赖它们。我已经用更全面的原型
更新了答案,说明了1.6.0
到1.6.1
版本的更改
这两者之间非常混乱,但1.6.1有点干净:
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!') }"
})
谢谢你更新另一个答案!我相信它会像我通过谷歌一样帮助其他找到它的人。虽然您是第一个,但crescentfish给出了我需要的1.6.0.X版本的更完整的答案。