jQuery.bind()和jQuery.on()之间有什么区别?

时间:2012-02-02 14:12:04

标签: javascript jquery

为什么.on()现在在jQuery 1.7中更受欢迎?

3 个答案:

答案 0 :(得分:28)

.on()现在在一个统一的方法中提供了.live().delegate().bind()的组合。您可以通过如何使用.on()的参数来获取这三者中的任何一种的行为。

这些对在功能上是相同的:

// events bound directly to the object they occur on
$('.button').on('click', fn);
$('.button').bind('click', fn);

// events intercepted after bubbling up to a common parent object
$('.container').on("click", '.button', fn);
$('.container').delegate('.button', "click", fn);

更多信息在jQuery blog entry

中描述

在统一这些单独的函数之前,jQuery有多个不同的实现。现在,.on()是超集函数,.bind().live().delegate()都只是在其实现中调用.on(),所以现在只有一个实现事件处理。因此,从这个角度来看,它也是一个代码清理和简化问题。同样,.die().undelegate().unbind()现在只需调用.off(),而不是单独实现。

注意:对于所有版本的jQuery,已弃用.live(),因为它只是拦截文档对象上所有冒泡事件的特殊情况,因此可以使用.delegate()或{{ 1}}当许多事件都在文档对象上处理时,它可能成为检查每个事件上的许多选择器的性能问题。将像这样的委托事件挂钩到更接近事件发生位置的公共父级,而不是将它们全部放在文档对象上(因此.on()不能使用的原因)会更有效。

从jQuery 1.7源代码中,您可以看到所有这些函数现在如何调用.live().on()

.off()

答案 1 :(得分:3)

MAIN的区别在于.bind要求元素(选择器)在它附加的时间存在,而.on没有那个要求,并且。在我看来坦率地说有更好/更优雅的语法。请参阅文档第一段http://api.jquery.com/bind/

答案 2 :(得分:1)

旧方法有点混乱 - live()delegate()bind()之间的区别并不清楚。通过使on()处理附加任何事件的函数,无论它是否存在,它都更容易使用。

在此之前,live()比新on()功能慢得多,因此您必须在bind()live()之间进行选择。