0

我有一个用 HTML/JavaScript/JQuery/CSS 编写的 SPA(单页应用程序)

每次单击导航链接时,主 div 都会通过 ajax 命令加载一大块 HTML/JavaScript/JQuery/CSS,并且 getScript 函数用于加载该块的 JavaScript/JQuery 部分。

一旦用户点击另一个链接,主 div 就会通过 remove() 函数被删除,并且带有其 JavaScript/Jquery 的新块将替换它。

这是问题所在:当我在第二次、第三次等时间加载主 div 的内容时(如果用户点击另一个链接但又回到这个链接)我是否再次运行 getScript 函数来加载 JavaScript/查询?如果是这样 - 它不会将“on”和其他事件相互绑定,还是 remove() 函数会处理它并且没有任何内存泄漏是安全的?

谢谢您的反馈!

4

1 回答 1

0

来自http://api.jquery.com/remove/

与 .empty() 类似,.remove() 方法将元素从 DOM 中取出。当您想要删除元素本身以及其中的所有内容时,请使用 .remove()。除了元素本身,所有与元素相关的绑定事件和 jQuery 数据都被移除。要删除元素而不删除数据和事件,请改用 .detach()。

所以绑定在 div 及其后代上的所有事件都将被移除并可以安全地反弹。但是,如果您正在注入的 JavaScript 将事件绑定到 div 之外的内容,例如文档、窗口、正文等。多个事件将被绑定,如果意外可能会导致问题。

从 jQuery 1.4 开始,同一个事件处理程序可以多次绑定到一个元素。这在使用 event.data 特性或其他唯一数据驻留在事件处理函数周围的闭包中时特别有用。

http://api.jquery.com/on/

如果您绝对必须绑定到重复运行的脚本中的更高级别元素,那么您应该在绑定事件之前考虑使用off() 。

于 2013-08-14T23:53:50.060 回答