如果我将JavaScript事件绑定到一个元素,然后删除该元素,该事件会发生什么?

时间:2015-12-09 21:11:00

标签: javascript jquery html dom javascript-events

假设我有一个元素:

<section id="container">
    <div id="curious">hey, there</div>
</section>

然后,在DOM加载之后,我将事件绑定到元素,如下所示:

$('#curious').click(function (){
  alert('Are you curious?');
});

稍后,该元素将被删除:

$('#container').html('');

绑定事件会怎样?它也被删除了吗?它徘徊吗?清理它是一个好习惯吗?

1 个答案:

答案 0 :(得分:5)

根据.html() method的jQuery文档,删除了事件处理程序。

这样做是为了防止内存泄漏。

  

.html()用于设置元素的内容时,该元素中的任何内容都将被新内容完全替换。此外,在使用新内容替换这些元素之前,jQuery 会从子元素中删除其他构造(如数据和事件处理程序)

同样,使用.empty() / .remove()方法同样适用:

  

删除与元素关联的所有绑定事件和jQuery数据。

如果要保留数据和事件侦听器,请改用.detach() method.detach()方法基本上与.remove()方法相同,只是它保留了所有jQuery数据与删除的元素相关联(这意味着您可以在分离后添加相同的元素,并且事件仍将受到约束)。