因此,对于新的 ajax,我们必须在每次进行 ajax 调用时重新初始化我们的 Javascript 事件处理程序,因为 ajax 调用会导致整个页面的大量重绘,从而导致未初始化的对象。
看看这个 jsfiddle: Javascript eventhandler added multiple times to the same object
这就是我所拥有的并且它似乎有效,但由于它将与我们拥有的一切一起使用:我想确保它是正确的解决方案。 例如。全局定义变量
MyCompany.field.bindedOnfocusSelector = MyCompany.field._focusEventHandler.bindAsEventListener(MyCompany.field);
只是感觉不对。而且它缺乏传递更多函数参数的可能性。
正如另一位发帖人所建议的原型(prototype)$(smth).on(event)
我在让它工作时遇到了问题 - 我记得问题是跨浏览器明智的(例如在 IE 8 上不起作用,但它起作用了在 Firefox 中)甚至在这个更简单的例子中 jsFiddle problem with on('focus') :
最佳答案
如何注册一个 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
仅在原型(prototype) 1.7 中可用
更新
好吧,如果你只是检查点击,键盘现在不能工作,但我认为这是一个可行的解决方案
关于javascript - JS 原型(prototype) : Avoiding an event handler being bound several times to the same object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482703/