我处于某种情况,在这种情况下,我做了很多ajax调用来更改html的相同部分。这个html代表一个网格。在ajax调用中更改html后,我将事件处理程序附加到网格事件。当用户点击一个刷新按钮时,我执行相同的ajax调用来设置新的html代码,并且再次添加一个事件处理程序来监听网格事件。在javascript中未使用的事件处理程序发生内存泄漏
我想知道如果每次我刷新我的网格并添加一个新的事件处理程序,如果上一个事件处理程序仍在内存中,并且如果是的话,这种情况下最好的做法是什么? (例如,如果存在把新的HTML之前解除绑定的事件处理程序)
这里是我做的一个例子:
$.get(this.config.actionLoggingUserListUrl, viewModel, function (data) {
MyNamespace.ui.hideGridAnimation($("#LoggingActionUsersList"));
if (data.success) {
$("#validationSummary").html("");
$("#usersList").html(data.result);
$("#LoggingActionUsersList").click(function() {
console.log("Here is my event handler attached multiple times!");
});
}
else {
$("#validationSummary").html(data.result);
$("#usersList").html("");
}
});
请注意,我在这种情况下,谈论的事件处理程序是:
$("#LoggingActionUsersList").click(function() {
console.log("Here is my event handler attached multiple times!");
});
您肯定会在每次运行代码时为其添加新的事件处理程序。您可以使用“解除绑定”来解除绑定,或者只是跟踪处理程序是否已经绑定。 – Pointy
jQuery'.html()'隐式地清除了被'.html()'替换的元素中的任何(jQuery)处理程序和(jQuery) - 数据。所以如果你正在附加一个处理程序的这个元素被上面的'.html()'调用所取代,那么你不需要明确地分离它。 – Esailija