是否有更好的方法将事件附加到AJAX加载的元素而不是使用.live()?

时间:2012-11-30 21:49:58

标签: javascript jquery

使用较新的jQuery .click().submit()等替换为:

$('#foo').on('click', function() {
    //
});

就最佳做法而言。在.live()发生了类似的事吗?或者这仍然是最好的方法吗?

$('#foo').live('click', function() {
    //
});

4 个答案:

答案 0 :(得分:3)

使用.on()的授权是正确的方式,而不是使用实时

$('staticAncestorElement').on('click','#foo',function(){

});

从jQuery live()文档中可以看到

  

$(selector).live(events,data,handler); // jQuery 1.3 +

     

$(document).delegate(selector,events,data,handler); // jQuery 1.4.3 +

     

$(document).on(事件,选择器,数据,处理程序); // jQuery 1.7 +

答案 1 :(得分:3)

On()具有所有其他绑定的所有功能。要绑定到动态元素,您可以使用on(),如下所示:

$(document).on('click', '#foo', function() {
    //
});

最好使用close静态元素而不是document

引用我的另一篇文章,了解jQuery提供的许多绑定方法:

  

bind()已添加到1.0,live()添加到1.3,delegate()添加到1.4.2中   1.7中的on()

     

从1.7开始on()是首选用途,live()已被弃用   根本不推荐。如果您使用的是1.3,请使用bind()代替   live()以及从1.4.2开始使用delegate()代替live()   1.7使用on()而不是其他任何一个。

您可以看到完整的帖子here,其中还列出了live()的许多缺点以及为什么它不应该在jQuery 1.7或更高版本中再次使用。

答案 2 :(得分:1)

  

使用较新的jQuery .click(),. submit()等替换为

他们没有被替换。 clicksubmit仍有效,但现在它们是on的快捷方式。不推荐使用的方法是bindlive。现在,您可以执行此操作来委派事件:

$(closestStaticParent).on('click', 'element', function(){ ... })

答案 3 :(得分:1)

.click未被.on("click"取代。阅读文档。

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers.

.live已被.on.off取代。

.click等其他功能将继续按预期工作