代码之家  ›  专栏  ›  技术社区  ›  Jeremy Kauffman

在删除Javascript事件侦听器所附加的元素之前,是否需要先删除它们?

  •  8
  • Jeremy Kauffman  · 技术社区  · 17 年前

    假设我将各种事件监听器附加到各种表单元素。稍后,我想删除整个表单。

    <form id="form">
      <input type="text" id="foo"/>
      <input type="text" id="bar"/>
    </form>
    

    $('foo').observe('keypress', onFooKeypress);
    $('bar').observe('keypress', onBarKeypress);
    

    等等

    $('form').replace(newForm)

    3 回复  |  直到 7 年前
        1
  •  4
  •   Jonas Høgh    17 年前

    未注册的事件可能不会自动释放内存。这在旧版本的IE中尤其是一个问题。

    here

        2
  •  3
  •   savetheclocktower    17 年前

    但是,如果用户要在此页面上停留一段时间,内存使用量将在页面的整个生命周期内累积。您有几个选择:

    1. 祖先

    2. Element#replace

      $('foo', 'bar').each(Element.stopObserving);
      

    stopObserving 给定元素上的处理程序。

    我建议选择1。

    (我们已经讨论过在Prototype的未来版本中自动删除监听器,作为 Element#update

        3
  •  0
  •   Lark    17 年前

    在Jonas下面提到的场景中,从DOM中删除的元素中删除任何事件监听器总是好的。

    推荐文章