javascript - 有没有办法取回在 Prototype 中使用 Event.observe 注册的匿名事件处理程序?

标签 javascript events prototypejs

与遗留代码交互,我得到了这样的东西:

Event.observe(some_form, 'submit', [some anonymous function])

我想重新获取匿名事件处理程序,在 Prototype 中是否有一种简单的方法可以做到这一点?

最佳答案

这取决于 Prototype 的版本。来自更一般的答案I wrote previously :

  • 版本 1.5.x:

    // inspect
    Event.observers.each(function(item) {
        if(item[0] == some_form && item[1] == 'submit') {
            alert(item[2]) // [some anonymous function]
        }
    })
    
  • 版本 1.6 到 1.6.0.3(含)(这里非常困难)

    // inspect. "_eventId" is for < 1.6.0.3 while 
    // "_prototypeEventID" was introduced in 1.6.0.3
    var submitEvents = Event.cache[some_form._eventId || (some_form._prototypeEventID || [])[0]].submit;
    submitEvents.each(function(wrapper){
        alert(wrapper.handler) // [some anonymous function]
    })
    
  • [当前]版本 1.6.1(稍微好一点)

    // inspect
    var submitEvents = some_form.getStorage().get('prototype_event_registry').get('submit');
    submitEvents.each(function(wrapper){
        alert(wrapper.handler) // [some anonymous function]
    })
    

关于javascript - 有没有办法取回在 Prototype 中使用 Event.observe 注册的匿名事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655943/

相关文章:

javascript - Uncaught ReferenceError : phone is not defined javascript error

javascript - 有什么方法可以在 jQuery 中委托(delegate)事件吗?

javascript - 合并 OnMouseUp/Down 功能?

javascript - 我可以优化此 js 原型(prototype)库以在 IE 中更快地制作动画吗?

javascript - 使用 Stripes、Javascript 和 Ajax

javascript - 延迟 href 链接几秒钟

javascript - 我可以将 javascript 模块与 "regular"javascript 混合使用吗?

javascript - 无法将参数传递给 Angular Directive(指令)

java - 在 TableView ScrollBar 上添加监听器

javascript - Ajax 未在原型(prototype)上触发 - 我想我需要取消设置或删除 javascript 方法 - 造成严重破坏帮助!