我正在编写一个将事件处理程序附加到链接的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);
答案 0 :(得分:1)
当您替换元素时,它将从DOM中删除。如果该元素没有被其他任何东西引用,那么它将有资格进行垃圾收集,当它被垃圾收集时,它的点击处理程序也将被垃圾收集(假设没有其他东西引用点击处理程序)。
但是,例如,如果你的代码中有某个全局变量,就像这样:
var plusOneDiv = $("#plusonediv");
并且您不更新该变量以引用通过AJAX检索的新链接,然后即使使用$(...).replace(...)
替换元素将其从DOM中删除,也不会对其进行垃圾回收。但看起来你正在更新它,所以最初的#plusonediv
元素及其监听器最终将被垃圾收集并从内存中删除。