假设我已将各种事件监听器附加到各种表单元素。后来,我想删除整个表格。
是否有必要(或建议)注销存在于表单及其元素上的任何事件处理程序?如果是这样,删除元素集合上所有监听器的最简单方法是什么?不这样做的后果是什么?如果重要的话,我正在使用 Prototype。
这就是我实际在做的事情。我有一个简单的表格,如下所示:
<form id="form">
<input type="text" id="foo"/>
<input type="text" id="bar"/>
</form>
我观察输入的各种事件,例如:
$('foo').observe('keypress', onFooKeypress);
$('bar').observe('keypress', onBarKeypress);
等等
表单通过 AJAX 提交,响应是表单的新副本。我用新表单的副本替换旧表单,执行类似 $('form').replace(newForm)
的操作。我是不是积累了一堆事件垃圾?
最佳答案
未注销的事件可能不会自动释放内存。这在旧版本的 IE 中尤其是一个问题。
Prototype 曾经为此有一个自动垃圾收集系统,但该方法在 1.6 版本中已被删除。已记录 here .删除该方法是否意味着不再进行垃圾收集,或者该方法不再公开可用,我不知道。另请注意,它仅在页面卸载时调用,这意味着如果您的用户在执行大量 AJAX 和 DOM 更新时长时间停留在同一页面上,即使在该页面访问期间,内存也可能泄漏到 Not Acceptable 程度。
关于javascript - Javascript 事件监听器是否需要在删除它们所附加的元素之前被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1138565/