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

标签 javascript ajax prototypejs dom-events

因此,对于新的 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/

相关文章:

javascript - jQuery 数据表向 tr 添加类

php - 如何提高使用masonry js插件的网页上的图像加载速度

jquery - 递归函数 - jQuery,获取链接

javascript - Prototype.js 和关联数组

javascript - Internet Explorer 上的 Prototype.js 错误

javascript - 原型(prototype)中的 jQuery.active($.active) 相当于什么

javascript - 使用变量缩放图像

javascript - 如何使用 JavaScript 激活按钮样式?

javascript - 为什么在 javascript 中使用 fetch 后 session 会被清除?

javascript - struts2和Restful中简单的ajax返回json但有异常