0

我正在编写一个将事件处理程序附加到链接的 jQuery JS 文件,但事件处理程序将链接替换为通过 ajax 请求检索到的新链接。它实际上是一个 +1、-1 函数,因此链接来回切换。

我的理解是,即使链接被点击两次并恢复到原来的值,它也会成为第三个唯一的对象,对吗?我的问题是,每次分离事件处理程序对我有什么好处?因为在链接被替换后删除事件处理程序时它不会引发错误,所以我猜测该对象及其事件处理程序仍然存在于 JS 中,它们只是不再存在于 HTML 文档中,对吗?无论我是否这样做,它都可以正常工作,但我现在 100% 确定该过程是如何工作的。

这是我的 .done() 函数:

.done(function(ReturnData){
    PlusOneDiv.replaceWith(ReturnData);
    // Redefine variables and detatch/reattach event
    PlusOneLink.off('click'); // Is this line helpful at all?
    PlusOneDiv = $('#plusonediv');
    PlusOneLink = PlusOneDiv.children('a');
    PlusOneLink.on('click', submit_plus_one);
4

1 回答 1

1

当您替换元素时,它会从 DOM 中移除。如果该元素没有被其他任何东西引用,那么它将有资格进行垃圾收集,当它被垃圾收集时,它的点击处理程序也将被垃圾收集(假设没有其他任何东西引用点击处理程序)。

但是,例如,如果您的代码中某处有一个全局变量,如下所示:

var plusOneDiv = $("#plusonediv");

并且您不会更新该变量以引用通过 AJAX 检索的新链接,那么即使使用替换元素$(...).replace(...)将其从 DOM 中删除,它也不会被垃圾收集。但是看起来您正在更新它,因此原始#plusonediv元素及其侦听器最终将被垃圾收集并从内存中删除。

于 2013-05-07T16:18:02.707 回答