我的问题很简单:我们是否必须从我们从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模板。
答案 0 :(得分:0)
考虑这个例子:
http://jsbin.com/bunoyedabo/edit?html,js,console,output
首先,使用事件委托。 $()。on('eventName','targetSelector',cb); 其次,您可以使用.off()或.unbind()取消绑定事件。