gpt4 book ai didi

javascript - JS 原型(prototype) : Avoiding an event handler being bound several times to the same object

转载 作者:行者123 更新时间:2023-11-30 18:38:42 28 4
gpt4 key购买 nike

因此,对于新的 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 中可用

更新

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

Updated Fiddle

关于javascript - JS 原型(prototype) : Avoiding an event handler being bound several times to the same object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482703/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com