2009-09-14 34 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

相關問題