JS Prototype:避免将事件处理程序多次绑定到同一个对象

时间:2011-09-20 09:07:36

标签: javascript ajax javascript-events prototypejs

因此,对于新的ajax,每次进行ajax调用时我们都必须重新初始化我们的javascript事件处理程序,因为ajax调用会导致整个页面的重绘非常重,导致未初始化的对象。

看看这个jsfiddle: Javascript eventhandler added multiple times to the same object

这就是我所拥有的,它似乎有效,但因为它将与我们所拥有的一切一起使用:我想确保它是正确的解决方案。 例如。全局定义变量

    MyCompany.field.bindedOnfocusSelector = MyCompany.field._focusEventHandler.bindAsEventListener(MyCompany.field);
只是感觉不对劲。它缺乏交出更多函数参数的可能性。

正如另一张海报建议原型$(smth).on(事件)我有问题让它工作 - 我记得问题crossbrowser明智(例如在IE 8的东西没有工作在Firefox中工作)甚至在这个更简单的例子jsFiddle problem with on('focus')

1 个答案:

答案 0 :(得分:2)

如何注册ajax响应器,并在请求完成后添加方法

Ajax.Responders.register({
    onComplete: function(transport) {
        MyCompany.field._initTextInputFields();
    }
});

<强>更新

好的,考虑到你的评论,如何观察整个页面,body并确定输入事件是否发生,例如:

 $("#body").on("focus", "input[type=text]:not([readonly])", function(event, element) {
    // ....
 });

我认为这会对你有所帮助,因为你只需要添加一个观察者,而且永远不需要删除它,所有的逻辑都可以被包含。

PS:请注意,Event.on仅适用于原型1.7

<强>更新

好的,如果你只是检查点击,键盘现在不会工作,但我认为这是一个可行的解决方案

Updated Fiddle