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

时间:2009-09-14 16:48:21

标签: javascript events prototypejs listener observer-pattern

我正在寻找this question的更新答案。

似乎在Prototype 1.6+中不再使用Event.observers(可能是为了避免内存泄漏),那么如何追踪哪些事件监听器附加到元素?

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

2 个答案:

答案 0 :(得分:7)

我更新了答案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!') }"
})

答案 1 :(得分:6)

事情现在通过元素存储路由:)

Element.getStorage(yourElement).get('prototype_event_registry')将为您提供Prototype的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.

请注意这些是未记录的内部详细信息,将来可能会更改,所以我不会依赖它们,除非是为了调试目的。