假设我有一个 ID 为
formsection
的 div
元素,其内容会被反复地使用 AJAX 更新,就像这样:var formSection = $('div#formsection');
var newContents = $.get(/* URL for next section */);
formSection.html(newContents);
每当我更新这个div时,我会触发自定义事件,该事件会绑定事件处理程序到一些新添加的元素上,例如:
// When the first section of the form is loaded, this runs...
formSection.find('select#phonenumber').change(function(){/* stuff */});
...
// ... when the second section of the form is loaded, this runs...
formSection.find('input#foo').focus(function(){/* stuff */});
所以:我正在将事件处理程序绑定到一些DOM节点,然后稍后删除这些DOM节点并插入新的节点(html()
可以做到这一点),并将事件处理程序绑定到新的DOM节点。
我的事件处理程序和它们绑定的DOM节点一起被删除了吗?换句话说,当我加载新的部分时,是否会在浏览器内存中堆积大量无用的事件处理程序,等待不存在的DOM节点上的事件,或者当它们的DOM节点被删除时会被清除?
额外问题:我如何自己测试这个问题?
event.target
属性来确定哪一行被点击,会更加简单。而不是为每个新创建的行分配处理函数。当然,这可以被抽象化(如jQuery的live
函数),但增加的复杂性仍然存在。 - MooGoo