我在查找this question的更新回答。更新:如何在原型中的DOM节点上查找事件侦听器?
在Prototype 1.6+中似乎不再使用Event.observers(也许是为了避免内存泄漏),那么现在如何追踪哪些事件监听器被附加到一个元素?
我知道Firebug有一个“下一个中断”按钮,但在我可以获得我想要的另一个特定元素的行为之前,body元素上有几个鼠标监听器,所以还有其他方法吗?现在
我在查找this question的更新回答。更新:如何在原型中的DOM节点上查找事件侦听器?
在Prototype 1.6+中似乎不再使用Event.observers(也许是为了避免内存泄漏),那么现在如何追踪哪些事件监听器被附加到一个元素?
我知道Firebug有一个“下一个中断”按钮,但在我可以获得我想要的另一个特定元素的行为之前,body元素上有几个鼠标监听器,所以还有其他方法吗?现在
我已经更新了答案you linked to,其中涵盖范围更广的Prototype
涵盖了版本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!') }"
})
事情是通过元素存储路由:)
Element.getStorage(yourElement).get('prototype_event_registry')
会给你原型的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.
注意这些无证内部细节这可能会在未来被改变,所以我不会依靠他们除了,也许,调试的目的。
+1 THX,kangax。虽然你是第一个,但是新月鱼在我需要的1.6.0.X版本中给出了更完整的答案。 – 2009-09-14 18:38:50
Thx用于更新其他答案!我确定它会帮助其他人发现它,就像我通过谷歌一样。 – 2009-09-14 18:36:35