Javascript 更新:如何在prototype中的DOM节点上查找事件侦听器?

Javascript 更新:如何在prototype中的DOM节点上查找事件侦听器?,javascript,events,prototypejs,listener,observer-pattern,Javascript,Events,Prototypejs,Listener,Observer Pattern,我正在寻找最新的答案 在Prototype 1.6+中,似乎不再使用Event.observators来避免内存泄漏,那么现在我如何跟踪哪些事件侦听器连接到元素 我知道Firebug在“下一步”按钮上有一个中断,但body元素上有多个鼠标侦听器,在我可以在另一个特定元素上获得我想要的行为之前执行,那么还有其他方法吗?现在通过元素存储路由: getStorageyourElement.get'prototype\u event\u registry'将为您提供prototype哈希的实例,因此您可

我正在寻找最新的答案

在Prototype 1.6+中,似乎不再使用Event.observators来避免内存泄漏,那么现在我如何跟踪哪些事件侦听器连接到元素


我知道Firebug在“下一步”按钮上有一个中断,但body元素上有多个鼠标侦听器,在我可以在另一个特定元素上获得我想要的行为之前执行,那么还有其他方法吗?

现在通过元素存储路由:

getStorageyourElement.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版本的更完整的答案。