jQuery中的delegate()和on()有什么区别?

4
5个回答

3

来自文档

自jQuery 1.7版本以来,.delegate()方法已被.on()方法所取代。

这只是遗留的代码,请勿使用。


同意,看到了jQuery 1.9中的代码delegate: function( selector, types, data, fn ) { return this.on( types, selector, data, fn );},如果没有任何区别,那么应该将其从jQuery中删除,不是吗?bind()也可能会有同样的问题。 - Rohan Kumar
“应该被移除”这是一个相对主观的问题,涉及到向后兼容性和API简化的取舍。 - Quentin

3
这是jQuery团队的一名成员在2013年针对这个问题所写的:“我们没有弃用.bind.delegate,也没有表明我们会在任何时候移除它们。它们在源代码中仅有一行,因此减小文件大小并不是删除它们的一个很好的理由。我们之所以弃用.live是因为它有很多让人困惑的问题,我们无法解决。” 基本上,尽管delegate()已被on()取代,但由于它占用的空间非常小(并且没有引起任何问题),所以没有未来计划弃用delegate()

"它占用的空间非常小",在http://code.jquery.com/jquery-1.7.1.js上查看`live()`。我认为它也不会比`delegate()`占用太多空间。 - Rohan Kumar
@RohanKumar 是的,但是正如提到的那样,live()被删除是出于其他原因。 - dsgriffin

2

我认为这更多是关于他们是否想要打破已经使用它的用户...就委派处理程序而言,我没有看到它们之间有任何性能差异...

因此,建议新代码应该使用.on()而不是.delegate。


所以,你不知怎么地同意从jquery中删除delegate(),你可以在http://jsperf.com/jquery-event-delegation/85上检查性能。 - Rohan Kumar
@RohanKumar,性能差异是因为.on()需要进行一些条件检查,以确定要注册哪种类型的事件。 - Arun P Johny

2

on 的作用是替代 delegate。可能 jQuery 作者会保留它一段时间以使其更具向后兼容性。许多旧插件仍在使用这些方法,这可能是保留它的原因。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接