4

最近 jQuery 团队开始推荐使用on而不是bindfor 将事件绑定到 DOM。

我想知道它们之间是否有区别,使用该函数有什么好处,以及在我的代码中将所有 my 's 函数更改为's 函数on是否是一个很好的调用?bindon

4

5 回答 5

11

jQuery 项目正朝着将越来越多的功能放在更少的方法中,而不是为每个单独的事物使用单独的方法。

方法bind和都已被单个方法所取代live,您可以在其中使用不同类型的参数来确定该方法的作用。delegateon

比较:

$(sel).bind(event, f);            =    $(sel).on(event, f);
$(sel).live(event, f);            =    $(document.body).on(event, sel, f);
$(sel).delegate(sel2, event, f)   =    $(sel).on(event, sel2, f);

如果您正在使用live,则应该替换它,因为该方法的使用有点尴尬。此外,该live方法在 body 元素上创建了一个委托,您应该尝试将委托绑定到更近的范围。

如果您正在使用bind并且delegate立即更换它们并不恐慌on。您可以在新代码中以及在您编辑的代码中执行此操作,但这些方法不会在不久的将来消失。

于 2013-04-18T20:07:46.410 回答
2

基本用例基本没有区别

 $( '#elementID' ).bind( 'click', function(){...} );
 $( '#elementID' ).on( 'click', function(){...} );

这两个功能相同..

.on()也做事件委托,因此是首选。

添加 .on() 的想法是创建一个统一的事件 API,而不是有多个函数来绑定事件;

.on() 替换 .bind()、.live() 和 .delegate()。

并且截至 jquery 1.7 ...bind只是一个别名.on()

于 2013-04-18T20:03:28.667 回答
2

On 从现在和将来附加一个事件处理程序。绑定,但是仅在您设置事件时附加该事件。如果动态添加其他元素,则不会为这些元素触发 bind。

于 2013-04-18T20:04:26.600 回答
1

bind只是可能会被删除的简写。来自 jQuery 的源代码:

...

bind: function( types, data, fn ) {
    return this.on( types, null, data, fn );
},

...

您可以自己查看源代码的介绍,以了解有关 jQuery 工作原理的很多信息。

于 2013-04-18T20:02:46.023 回答
1

不同的是,bind绑定事件,on也可以绑定事件,但也可以管理事件委托。

http://api.jquery.com/on/#direct-and-delegated-events

如果您想更详细地检查这一点,请查看此博客文章:http ://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html

于 2013-04-18T20:04:47.473 回答