在jQuery中取消绑定/绑定与委托:哪个是最佳解决方案?

时间:2011-10-06 18:04:27

标签: jquery performance bind unbind event-propagation

我有jQuery代码处理解绑定和绑定事件处理程序到动态添加到页面的元素。代码有一个包装函数,它从具有给定id前缀的元素中取消绑定现有处理程序,然后绑定事件处理程序,以便任何现有元素都具有处理程序,并且任何新添加的相同id前缀的元素也可以获取它。显然,这会对添加了新元素时已经存在的id前缀的元素进行额外的解除绑定/绑定。取消绑定是为了防止现有元素获得分配给它们的相同类型的多个处理程序。

自从最初编写这段代码以来,我已经了解了jQuery委托函数,它本质上就像我上面所做的一样。

代理功能是否会更好地完成我所做的工作,以便我可以花时间重写当前的工作代码以利用它?更好的是指性能,内存使用或其他一些措施。

1 个答案:

答案 0 :(得分:1)

当您使用.delegate()时,您需要选择一个祖先元素,该元素将成为指定后代上事件的侦听器。这很好,因为从一开始你就绑定了一个应该或多或少“永久”在你的页面上的监听器,无论在其后代树中添加或删除了多少有效目标。

对于动态网页来说,这肯定比.click更好,并且比在元素添加或删除时使用一系列.bind.unbind更好。

但是,它可能等于使用.bind()选择一个侦听指定后代点击的祖先元素的方式。我对.bind()不够熟悉,无法肯定地说出性能优势。

-

除了与您的问题没有特别相关的旁边,它是一个比.live()更好的功能,所以如果您想要使用.live(),我强烈建议使用.delegate()一个更好的选择。