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