2010-04-13 53 views
1

我的应用程序通过Ajax提供响应,并在每次刷新时创建5-20个新的jQuery点击侦听器。 IE浏览器和Mozilla浏览器似乎都随着使用情况而变慢。这能否显着降低浏览器性能?听众可以“发布”吗?可以添加jQuery监听器减慢浏览器性能?

回答

2

使用.bind()设置的听众在元素被移除或编辑.unbind()时被释放。那些使用.live()的设置会一直存在,直到你调用.die()或者它们绑定的元素被删除(如果你指定的话,它可能在DOM的某个地方,否则它会默认为DOM根 - .live()通过不绑定到目标元素该元素可以被移除/替换/更新并且事件监听器仍然绑定)。

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

+1

确保通过jQuery删除元素。 empty()和html()方法将起作用。 – 2010-04-20 17:17:54

2

您可以取消绑定使用unbind监听器:

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

,并使用die删除live事件:

$("#foo").die(); // remove all live events 
$("a").die("click"); // remove live click event handlers 
3

要添加到什么安迪说有关活动。

您应该在要添加到页面的元素上使用delegatelive。这听起来像你没有将新元素的独特事件(每次刷新)绑定在一起,而是重用了函数。

在jQuery的1.4.2使用可以使用委托()这样的:

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

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