最近,jQuery团队开始建议使用on
代替bind
将事件绑定到DOM。
我想知道它们之间是否存在差异,使用on
函数有什么好处?如果将bind
更改为{{ {1}}我的代码中的函数?
答案 0 :(得分:11)
jQuery项目正在朝着更少的方法投入越来越多的功能,而不是为每个单独的东西分别使用单独的方法。
方法bind
,live
和delegate
已全部替换为单个方法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元素上创建委托,您应该尝试将委托绑定到更近的范围。
如果您使用的是bind
和delegate
,则立即用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