2

当用户单击过滤器链接时,我正在执行 AJAX 调用以替换页眉下方的所有内容以及页面页脚上方的所有内容。

问题是在 AJAX 事件之后,绑定到各种 DOM 元素的所有 JavaScript 事件都中断了。这是有道理的,因为它们绑定在一个低得多的模块级别示例上

$(".innerDiv").on("click",function(){doSomething();}

并且通过替换父容器的内容,这些事件不再被绑定。

处理这个问题的正确方法是什么?我可以将事件侦听器添加到更高的级别,例如

$(document).on("click",".innerDiv",function(){doSomething();}

但这将具有与 jQuery 中的 live() 函数被弃用相同的低效率和问题。

我发现建议的另一个解决方案是在 AJAX 调用之后重新绑定事件。问题是我正在处理一个相当复杂的页面,它包含许多 JavaScript 模块,每个模块都有自己的绑定。我将如何跟踪每个绑定的事件?有没有办法从 jQuery 中访问这些信息?我应该维护我自己的所有元素的数据结构,这些元素绑定了事件吗?

在发出 AJAX 请求之前,我还需要使用“off()”函数取消绑定事件吗?

谢谢你的帮助

4

1 回答 1

0

在 JQuery 中可以使用 beforeSend http://api.jquery.com/jQuery.ajax/来取消绑定事件

于 2012-11-12T17:02:58.803 回答