2

我有通过 Ajax 带来响应的应用程序,并在每次刷新时创建 5-20 个新的 jQuery 单击侦听器。IE 和 mozilla 浏览器的使用似乎都在变慢。这会显着降低浏览器性能。听众可以被“释放”吗?

4

3 回答 3

3

添加到安迪所说的现场。

您可能应该使用委托或使用要添加到页面的元素听起来您没有将唯一事件绑定到新元素(每次刷新时),而是重用函数。

在 jQuery 1.4.2 中,可以像这样使用 delegate():

// the container,        the selector, "the event", the function to be called
$("#container").delegate(".selector",  "click",     function(){
  // do stuff...
});

这只需要调用一次,并且每个添加到“#container”的“选择器”类的新元素都将绑定其点击事件

于 2010-04-13T13:29:47.693 回答
2

.bind()当元素被移除或.unbind()编辑时,设置 using 的监听器被释放。那些使用.live()持续存在的设置,直到您调用.die()或删除它们绑定的元素(如果您指定,它可能位于 DOM 中的某个位置,否则它将默认为 DOM 根 -.live()通过不绑定到目标元素来工作,因此元素可以被删除/替换/更新并且事件监听器仍然被绑定)。

5-20 个听众听起来太多了——如果可能的话,考虑绑定更少的处理程序,因为旧的浏览器会比新的浏览器更快地在压力下崩溃。

于 2010-04-13T13:21:14.383 回答
2

您可以使用以下方法取消绑定侦听器unbind

$("a").unbind("click"); // remove click event handler(s)
$("a").unbind(); // remove all event handlers

并使用以下方法删除live事件die

$("#foo").die(); // remove all live events
$("a").die("click"); // remove live click event handlers
于 2010-04-13T13:24:25.770 回答