【问题标题】:Update: How to find event listeners on a DOM node in prototype?更新:如何在原型中的 DOM 节点上找到事件监听器?
【发布时间】:2011-11-12 06:23:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript events prototypejs listener observer-pattern


    【解决方案1】:

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

    【讨论】:

    • 感谢更新其他答案!我相信它会帮助像我通过 google 一样找到它的其他人。
    【解决方案2】:

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

    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.
    

    请注意,这些是未记录的内部细节,将来可能会更改,因此我不会依赖它们,除非可能是出于调试目的。

    【讨论】:

    • +1 谢谢,kangax。虽然你是第一个,但是 crescentfish 用我需要的 1.6.0.X 版本给出了更完整的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2017-05-18
    • 2021-06-04
    • 2015-01-23
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多