在jQuery中使用BIND或ON函数的最佳实践

时间:2013-04-18 19:58:14

标签: javascript jquery events jquery-mobile binding

最近,jQuery团队开始建议使用on代替bind将事件绑定到DOM。

我想知道它们之间是否存在差异,使用on函数有什么好处?如果将bind更改为{{ {1}}我的代码中的函数?

5 个答案:

答案 0 :(得分:11)

jQuery项目正在朝着更少的方法投入越来越多的功能,而不是为每个单独的东西分别使用单独的方法。

方法bindlivedelegate已全部替换为单个方法on,您可以使用不同类型的参数来确定方法的作用。

比较:

$(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元素上创建委托,您应该尝试将委托绑定到更近的范围。

如果您使用的是binddelegate,则立即用on替换它们并不会引起恐慌。您可以在新代码和您编辑的代码中执行此操作,但这些方法不会在最近的将来消失。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

基本用例基本没有区别

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

这两个功能相同..

.on()也会执行事件委派,因此是首选。

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

  

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

从jquery 1.7开始.. .bind只是.on()的别名

答案 3 :(得分:1)

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

...

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

...

您可以自己查看source code,以了解jQuery的工作原理。

答案 4 :(得分: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