2009-09-14 68 views
6

我在查找this question的更新回答。更新:如何在原型中的DOM节点上查找事件侦听器?

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

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

回答

7

我已经更新了答案you linked to,其中涵盖范围更广的Prototype涵盖了版本1.6.01.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!') }" 
}) 
+0

Thx用于更新其他答案!我确定它会帮助其他人发现它,就像我通过谷歌一样。 – 2009-09-14 18:36:35

6

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

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. 

注意这些无证内部细节这可能会在未来被改变,所以我不会依靠他们除了,也许,调试的目的。

+0

+1 THX,kangax。虽然你是第一个,但是新月鱼在我需要的1.6.0.X版本中给出了更完整的答案。 – 2009-09-14 18:38:50