jquery click(),live()和on()

时间:2013-06-12 04:10:02

标签: jquery

只是有兴趣知道哪个 - Click(), Live() and On()是目前用来捕获用户鼠标的首选方法?

我认为live()已经出局,因为我相信扫描到大部分DOM。

三江源

5 个答案:

答案 0 :(得分:4)

来自jquery docs:

  

从jQuery 1.7开始,不推荐使用.live()方法。使用.on()来   附加事件处理程序。旧版jQuery的用户应该使用   .delegate()优先于.live()。这种方法提供了一种方法   将委派的事件处理程序附加到页面的document元素,   当内容是动态的时,它简化了事件处理程序的使用   添加到页面。请参阅直接与委派事件的讨论   在.on()方法中获取更多信息。

     

.on()方法将事件处理程序附加到当前选定的集合   jQuery对象中的元素。从jQuery 1.7开始,使用.on()方法   提供附加事件处理程序所需的所有功能。

For earlier versions, the .bind() method is used for attaching an event handler directly to elements.

TLDR:始终使用on(),绝不使用live()

答案 1 :(得分:1)

不推荐使用

live().bind()方法。 live()也已删除,其他两个是两种不同类型的事件处理程序。

  1. .click()是标准事件处理程序

    .click(function() {
        //Applies to DOM already present
    });
    
  2. 当您需要事件委派时,会使用
  3. .on()。这取代了传统的bind()delegate()

    .on('click', function() {
            //Delegates to each element is DOM as it manipulated or generated
    });
    

答案 2 :(得分:1)

“开启”是首选方法,因为将来您可以轻松地将其更改为“mouseup”,“mousedown”等其他方法。

答案 3 :(得分:1)

但是jQuery 1.9不支持实时功能,而不是你应该使用“on”

答案 4 :(得分:1)

TL; DR:live已被弃用,binddelegate被取代,on是绑定任意事件的首选方式,click只是很好,但有点受限。

$(selector).live("click", ...)自1.7以来被弃用,自1.9以来从jQuery中删除,不灵活(它总是绑定到document),效率极低(它首先找到元素,然后丢弃选择并使用选择器代替),要求选择器存储在jquery对象中并且通常是坏的。

$(document).on("click", selector, ...)live的字面替换,但它没有任何错误。这是jQuery的do-everything事件绑定功能。它可以绑定任何地方,或委托任何事物:$parent.on(events, [targetSelector,] handler)。您甚至可以一次绑定多个事件:.on("keypress paste change", ...)

binddelegateon的较老堂兄弟。前者不能委托,后者必须委托。他们在论证顺序上也有所不同 - on就是为了解决这个问题。它们已被on取代,但它们尚未被弃用(截至jQuery 1.10)。如果你必须使用旧版本的jQuery(1.7之前版本),那么它们就是。否则,请坚持on。他们当前的实现只是重定向到on

clickmouseOverchangemany other充当ontrigger的双重别名。从字面上看 - 它们除了分支其中之一外别无其他。它们中的大多数从一开始就存在,它们很方便。但是,它们不能委托,并且没有相应的解除绑定方法。如果您使用off,最好用on补充它。一个不错的属性是他们承担了跨浏览器兼容性的承诺。或者至少是一个记录任何缺乏跨浏览器支持的地方(即:load用于图像)。我个人的偏好是即使在on就足够的情况下也会使用click