Javascript性能 - 已删除节点上的事件

时间:2015-10-25 12:28:57

标签: javascript jquery javascript-events memory-leaks

我的问题很简单:我们是否必须从我们从DOM中动态删除的元素中删除javascript事件侦听器?

让我们使用jquery这个例子(fiddle with full code):我们有一个用户操作,使用jquery html函数更改DOM内容:

$('wrapper').html(markup);

标记变量有很多类eventDiv的元素,在这些元素上我们添加了一些事件监听器:

 $(".eventDiv").mouseenter(function() {
    $(this).css('background-color', 'red');
});
$(".eventDiv").mouseleave(function() {
    $(this).css('background-color', 'white');
});

这种更改html内容的方式会导致内存泄漏吗?我们必须解除所有事件监听器的绑定吗?或者是从DOM中删除节点了吗?

第二,有一种简单的方法可以删除容器div的子元素上的所有监听器吗?在我的情况下像

$( '包装')unbindAllChildEventsListeners();

PS:这是一个例子,真实案例场景在用户操作加载的新标记上有很多不同的事件,而且DOM树也更明确,“标记”变量来自一个dustjs模板。

1 个答案:

答案 0 :(得分:0)

考虑这个例子:

http://jsbin.com/bunoyedabo/edit?html,js,console,output

首先,使用事件委托。 $()。on('eventName','targetSelector',cb); 其次,您可以使用.off()或.unbind()取消绑定事件。