.delegate()vs .on()

Gal*_*led 47 jquery

我在我的Web应用程序中使用jQuery.我一直在使用,.bind()但我发现它有点慢,所以在阅读我阅读的文档.on().delegate().我理解它是如何.delegate()工作的,但我不清楚它与.on()它之间的区别是什么,或哪种情况更好.

此外,我正在使用jQuery 1.6,所以我想知道是否值得为jQuery 1.7准备我的脚本,条件类似于以下条件:

if(typeof $(selector).on == 'function'){
    /* use .on() */
}else{
    /* use .delegate() */
}
Run Code Online (Sandbox Code Playgroud)

这是一个好主意(准备.on())还是只是寻找麻烦?

请帮助我清楚地了解这些方法.

lal*_*ibi 52

.on()语法是新的语法,1.7版本的用途和它的目的是替代 .bind(),.delegate().live().

更多信息 - > http://blog.jquery.com/2011/11/03/jquery-1-7-released/

新事件API:.on()和.off()

新的.on()和.off()API统一了在jQuery中将事件附加到文档的所有方法 - 而且它们的输入更短!

  $(elements).on( events [, selector] [, data] , handler );
  $(elements).off( [ events ] [, selector] [, handler] );
Run Code Online (Sandbox Code Playgroud)

当提供选择器时,.on()类似于.delegate(),因为它附加了一个委托的事件处理程序,由选择器过滤.当省略选择器或null时,调用类似于.bind().有一个不明确的情况:如果data参数是一个字符串,则必须提供选择器字符串或null,以便数据不会被误认为是选择器.传递数据对象,您永远不必担心特殊情况.

所有现有的事件绑定方法(及其相应的解绑定方法)仍然存在于1.7中,但我们建议您使用.on()用于您知道1.7或更高版本的新jQuery项目.(强调我的)


zzz*_*Bov 11

我最近回答了一个关于这个话题的相关问题.

重要的是:

新的ondocs函数用于替换绑定事件的现有单独方法:

现有事件继续存在,并且只是on的别名.没有官方报告表明它们会被删除,因此如果你更了解它们,你可以安全地继续使用它们.

代表:

$(selector).delegate(subselector, events, data, handler);
$(selector).on(events, subselector, data, handler);
Run Code Online (Sandbox Code Playgroud)

资源:

delegate: function( selector, types, data, fn ) {
  return this.on( types, selector, data, fn );
}
Run Code Online (Sandbox Code Playgroud)

TL;博士

如果你想要向后兼容,只需继续使用.delegate()文档,如果你的代码依赖于更新的jQuery功能,请随意使用on.