jQuery的.live('click', fn)和.click(fn)在性能上有什么区别?

16

我喜欢 jQuery 1.3 中的新型现场事件。我的问题是这种事件的性能。我知道使用 live 比 click/bind('click') 的优点,但使用它是否会对性能造成影响?

如果不会,为什么还要使用 click 或 bind('click') 呢?


复制:https://dev59.com/K0fRa4cB1Zd3GeqP7Da9 - Crescent Fresh
我认为它们是不同的问题,因为这个问题仅涉及性能差异而不是一般性问题。 - MacAnthony
@MacAnthony:阅读那个问题的被接受答案,它详细解释了livebind的性能特点。这也是为什么我重复提了这个问题:因为它已经有答案了。 - Crescent Fresh
很酷,谢谢你提供链接。之前搜索时好像没找到。 - Mike
2个回答

12
如果不这样做,为什么你会使用click或bind('click')呢?
因为$.live()有一些显著的缺点。
- 实时事件不能像传统方式那样冒泡,也不能使用stopPropagation或stopImmediatePropagation来停止。例如,考虑绑定到"li"和"li a"的两个点击事件的情况。如果在内部锚点上发生点击,则会触发两个事件。这是因为当绑定$("li").bind("click", fn);时,实际上是在说“每当在LI元素上或在LI元素内发生单击事件时,请触发此单击事件。”要停止实时事件的进一步处理,fn必须返回false。 - 目前,实时事件仅在针对选择器时才起作用。例如,这将起作用:$("li a").live(...)但这不会:$("a", someElement).live(...),也不会:$("a").parent().live(...)。

某些事件无法被.live()捕获。 - MacAnthony
6
自1.4.4版本起,live()支持stopPropagation。 - Chris
@Kevin 请记住,我写这篇文章时,这个问题和答案都已经超过三年了。 - Peter Bailey

2

请参考这里

为什么要使用click或bind而不是live呢?答案是因为你不需要额外的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接