jQuery live方法有什么问题?

Pet*_*son 29 jquery

live()方法在jQuery 1.7中已弃用.jQuery文档现在推荐

使用.on()附加的事件处理程序.旧版jQuery的用户应该.delegate()优先使用.live().

我知道如何ondelegate工作,但我不明白为什么他们是更好的.live()更简单,更容易使用.

有没有理由live被弃用?其他方法如何更好?如果我继续使用,会发生什么不好的事live吗?

Tat*_*nit 33

请参阅此处的一些说明:

http://www.ultimatewebtips.com/why-jquery-live-is-a-bad-option-to-use/(网站似乎已关闭)

引用:

  1. 您不能使用.live()可重用的小部件.

  2. .stopPropagation() 不能用于直播.

  3. .live() 比较慢

  4. .live() 不可链接.

更进一步的美妙之.on()处在于它可以很好地简化所有事件:http://api.jquery.com/on/

呃,你知道关于api的链接,看看它是如何.on()工作的:)

引用:

.on()方法将事件处理程序附加到jQuery对象中当前选定的元素集.从jQuery 1.7开始,.on()方法提供了附加事件处理程序所需的所有功能.有关从旧的jQuery事件方法转换的帮助,请参阅.bind(),. delegate()和.live().要删除与.on()绑定的事件,请参阅.off().要附加仅运行一次然后自行删除的事件,请参阅.one()


Mat*_*ens 10

live() 效率低下有两个原因:

  • 在构造中$('selector').live(),jQuery首先必须选择所有元素.但是,在调用时live(),它只需要jQuery对象的选择器(存储在其中.selector),并且实际上不使用任何所选元素.因此,首先选择所有匹配元素然后不使用它们有点浪费.on()并将delegate()目标选择器作为参数,这意味着事先没有选择目标元素,并且仅在触发事件时才进行测试.
  • live()默认情况下绑定在该document级别,因此所有事件都需要在整个DOM中冒泡.您可以通过指定上下文缩小范围$(selector, context).live(),但最好使用on()delegate()为此.

在编写新代码时,强烈建议使用最新和最好的on()代替delegate()和不赞成使用live().但是,我不认为支持live()会很快被删除(如果有的话),因为很多脚本都依赖它.此外,使用live()over 没有真正的缺点on(),因为在jQuery源本身live()定义为:

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