【问题标题】:.live() vs .bind() [duplicate].live() 与 .bind() [重复]
【发布时间】:2010-04-22 11:36:52
【问题描述】:

我想知道两者的主要区别

.live().bind()

jQuery 中的方法。

【问题讨论】:

  • 你和其他很多人:stackoverflow.com/questions/937039/…
  • 另外值得一提的是,从 1.7 开始(在这个问题之后发布)live() 已被弃用,取而代之的是 on()
  • 例如$(document).on("click", "input#goodbye", function(){ alert("Goodbye!"); }); 并且不要在 $(document).ready();把它放在外面。在同一级别。

标签: jquery bind live


【解决方案1】:

主要区别在于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');

【讨论】:

  • 根据 andyzinsser 的评论:从 v1.7 开始,.live、.bind 和 .delegate 都已被 .on 取代。
【解决方案2】:

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

1) 使用点击事件的带有 id 的单个静态元素:

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

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

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

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

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

按照您的意愿解释,但在我看来,随着页面上动态元素的增加,.delegate() 似乎具有最佳性能,而静态元素使用 .bind() 时性能最佳。

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

谢谢!

【讨论】:

    【解决方案3】:

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

    http://api.jquery.com

    更新

    来自jQuery

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

    【讨论】:

    • 请参阅下面的评论,但我必须普遍同意。如果页面的树结构未知(并且您不想将事件绑定到&lt;body&gt;),.live() 可能是一个更好的包罗万象,但我认为这更多的是例外而不是规则。
    • 看来从 jquery 1.7 开始,首选的方法是 .on()
    【解决方案4】:

    从 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。这为您的事件处理程序提供了更优雅的实现。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多