在删除元素之前,我是否需要取消绑定jquery事件?

Ree*_*eed 45 jquery jquery-on

我有一个使用jquery-ui-dialog的页面.每次打开对话框时,都会使用ajax加载页面内容.然后它使用jquery"on()"绑定一些事件.当对话框关闭时,它将清空其内容.

问题是,我是否需要在$ .empty()之前取消绑定".ajax-content"上的事件?

编辑: 关注1.任何可能降低JS性能?如果我以这种方式清空()数百个节点.

关注2.将删除元素还从内存中删除事件(或任何jquery的执行/评估链)?

我现在没有对他们做任何事情.如果对话框多次打开/关闭而没有页面刷新,是否会导致任何问题?

代码看起来像这样:

<div id="jquery-dialog" class="container">
  <div class="ajax-content">
    some buttons....
  </div>
</div>

------after each ajax load------------
$(".ajax-content").on("click", ".button", function(event) {
  //handles the click
});

------on dialog close------------
$("#jquery-dialog").empty();
Run Code Online (Sandbox Code Playgroud)

小智 49

嘿,我知道这是一个老问题,但我相信接受的答案是误导性的.

虽然说你需要在原始JS上取消绑定事件以避免旧浏览器上的内存泄漏(ehem IE)是正确的,但是调用remove()或empty()已经为你做了.

所以你当前对empty()的调用应该足够了,它不需要以unbind()开头.

来自jQuery docs(http://api.jquery.com/empty/)

为了避免内存泄漏,jQuery在删除元素本身之前从子元素中删除了其他构造,如数据和事件处理程序.