DOM节点上的事件处理程序会随着节点的删除而被删除吗?

11 浏览
0 Comments

DOM节点上的事件处理程序会随着节点的删除而被删除吗?

(注意:下面我使用的是jQuery,但问题实际上是一个通用的JavaScript问题。)

假设我有一个

的元素,其中的内容会被不断使用AJAX更新,类似于这样:

var formSection = $('div#formsection');

var newContents = $.get(/* 下一个部分的URL */);

formSection.html(newContents);

每当我更新这个div时,我会触发一个自定义事件,将事件处理程序绑定到一些新添加的元素上,类似于这样:

// 当表单的第一个部分加载时,执行以下操作...

formSection.find('select#phonenumber').change(function(){/* 做一些事情 */});

...

// 当表单的第二个部分加载时,执行以下操作...

formSection.find('input#foo').focus(function(){/* 做一些事情 */});

那么:我的事件处理程序与它们绑定的DOM节点一起被删除吗?换句话说,当我加载新的部分时,是否会在浏览器内存中堆积大量无用的事件处理程序,等待不存在的DOM节点上的事件,或者在它们的DOM节点被删除时会被清除?

附加问题:我该如何自己测试这个问题?

0