微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – 有没有理由在$.delegate上使用$.live?

我在另一个问题中读到,如果没有容器将事件附加到你知道不会消失的$.delegate,你会使用直播,但为什么不简单地做:
$('body').delegate('.myThing','click',function() { ... });

我已经相当确信没有理由在任何新代码中使用$.live()并且它仍然仅用于向后兼容.

当然,我经常是错的.所以我问:我什么时候会使用$.live而不是$.delegate?为什么?

解决方法

$.live()

…如果您不需要为上下文使用特定元素,则会更简洁一些.

$.delegate()

如果您已经选择了上下文,则稍微方便一些,特别是如果您正在链接以在该上下文上执行其他操作.

…如果您没有对目标元素执行任何其他操作,则会稍微提高效率,因为它不会在绑定期间不必要地评估目标选择器.

…允许你定位多个上下文,live()不会(虽然见下面的实现说明).

否则,这是个人偏好的问题.您可以使用这两种方法完成相同的事情 – 事实上,当前(从1.4.2开始)委托的实现仅仅代表生活!

delegate: function( selector,types,data,fn ) {
        return this.live( types,fn,selector );
    }

实施说明

即使你可以有效地使用live()的当前实现来代替所有形式的delegate(),你应该避免以delegate()调用它的方式调用live() – 未记录的第四个参数仅供内部使用.通常,您可以通过将元素作为第二个参数传递给$()来为live()提供上下文给任何jQuery选择器的方式:

$(selector,contextElem).live(...);

如果您需要为上下文使用选择器(如在您希望将委托事件绑定到多个单独的上下文元素的场景中),您应该坚持使用delegate():

$("body>div").delegate(selector,...);

示范

// all of these are the same - pick the shortest form that fits your needs:
$(document).delegate('.myThing',function() { ... });
$('.myThing',document).live('click',function() { ... });
$('.myThing').live('click',function() { ... });

// this should only be done using delegate
$("#myTable,#myDiv,#myMarquee").delegate('.myThing',function(){...});

原文地址:https://www.jb51.cc/jquery/178693.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐