我在查找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