当用户单击过滤器链接时,我正在执行 AJAX 调用以替换页眉下方的所有内容以及页面页脚上方的所有内容。
问题是在 AJAX 事件之后,绑定到各种 DOM 元素的所有 JavaScript 事件都中断了。这是有道理的,因为它们绑定在一个低得多的模块级别示例上
$(".innerDiv").on("click",function(){doSomething();}
并且通过替换父容器的内容,这些事件不再被绑定。
处理这个问题的正确方法是什么?我可以将事件侦听器添加到更高的级别,例如
$(document).on("click",".innerDiv",function(){doSomething();}
但这将具有与 jQuery 中的 live() 函数被弃用相同的低效率和问题。
我发现建议的另一个解决方案是在 AJAX 调用之后重新绑定事件。问题是我正在处理一个相当复杂的页面,它包含许多 JavaScript 模块,每个模块都有自己的绑定。我将如何跟踪每个绑定的事件?有没有办法从 jQuery 中访问这些信息?我应该维护我自己的所有元素的数据结构,这些元素绑定了事件吗?
在发出 AJAX 请求之前,我还需要使用“off()”函数取消绑定事件吗?
谢谢你的帮助