.live()vs .bind()

时间:2010-04-22 11:36:53

标签: jquery bind live

我想知道

之间的主要区别

.live().bind()

jQuery中的

方法。

4 个答案:

答案 0 :(得分:93)

主要区别在于live也适用于在加载页面后创建的元素(即通过javascript代码),而bind只会绑定当前的事件处理程序现有项目。

// BIND example
$('div').bind('mouseover', doSomething);
// this new div WILL NOT HAVE mouseover event handler registered
$('<div/>').appendTo('div:last');

// LIVE example
$('div').live('mouseover', doSomething);
// this new appended div WILL HAVE mouseover event handler registered
$('<div/>').appendTo('div:last');

<强>更新

jQuery 1.7已弃用live()方法,1.9已将其删除。如果要使用1.9+实现相同的功能,则需要使用新方法on(),该方法的语法略有不同,因为它在文档对象上调用,并且选择器作为参数传递。因此,上面转换为这种新的绑定事件方式的代码将如下所示:

// ON example
$(document).on('mouseover', 'div', doSomething);
// this new appended div WILL HAVE mouseover event handler registered
$('<div/>').appendTo('div:last');

答案 1 :(得分:27)

我使用FF Profiler对.bind() vs .live() vs .delegate()进行了统计分析。我每次做了10轮(不是一个足够明确的样本,但说明了这一点)。这些是结果。

1)使用click事件识别id的单个静态元素:

.bind():     Mean = 1.139ms, Variance = 0.1276ms
.live():     Mean = 1.344ms, Variance = 0.2403ms
.delegate(): Mean = 1.290ms, Variance = 0.4417ms

2)使用click事件具有公共类的多个静态元素:

.bind():     Mean = 1.089ms, Variance = 0.1202ms
.live():     Mean = 1.559ms, Variance = 0.1777ms
.delegate(): Mean = 1.397ms, Variance = 0.3146ms

3)使用click事件的多个动态元素(第一个按钮创建第二个......):

.bind():     Mean = 2.4205ms, Variance = 0.7736ms
.live():     Mean = 2.3667ms, Variance = 0.7667ms
.delegate(): Mean = 2.1901ms, Variance = 0.2838ms

解释你的愿望,但在我看来,随着动态元素在页面上的增加,.delegate()似乎具有最佳性能,而静态元素在.bind()中表现最佳。

请记住,我正在使用一个非常简单的点击事件来触发警报。具有不同环境的不同页面(即CPU,多标签浏览,运行线程等)将呈现不同的结果。我将此作为我决定使用其中一个的基本指南。请告知您是否提出了不同的结果。

谢谢!

答案 2 :(得分:18)

您应该考虑尽可能使用.delegate()而不是.live()。 由于.live()的事件委派始终以正文/文档为目标,因此您可以限制 用.delegate()“冒泡”。

请参阅http://api.jquery.com

<强>更新

来自jQuery

  

从jQuery 1.7开始,.delegate()已被.on()方法取代。   但是,对于早期版本,.delegate()仍然是使用事件委派的最有效方法。

答案 3 :(得分:11)

从v1.7开始,.live,.bind和.delegate全部被.on http://api.jquery.com/on/

取代

我很好奇自己的差异,所以我写了一篇包含一些代码示例的文章。 http://blog.tivix.com/2012/06/29/jquery-event-binding-methods/

听起来取决于你如何调用.on(),jquery会模仿.bind,.live或.delegate。这为您的事件处理程序提供了更优雅的实现。