因此,对于新的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'):
答案 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
<强>更新强>
好的,如果你只是检查点击,键盘现在不会工作,但我认为这是一个可行的解决方案