6

Just interested to know which of - click(), live() and on() is currently the preferred method to catch a user mouse click?

I assume live() is out as this I believe scans to much of the DOM.

Thank you.

4

5 回答 5

4

来自 jquery 文档:

从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 而不是 .live()。此方法提供了一种将委托事件处理程序附加到页面的文档元素的方法,这在将内容动态添加到页面时简化了事件处理程序的使用。有关更多信息,请参阅 .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()

于 2013-06-12T04:19:19.637 回答
2

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

于 2013-06-12T04:20:23.947 回答
2

live().bind()方法已被弃用。live()也已被删除,因为其他两个是两个完全不同类型的事件处理程序。

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

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

    .on('click', function() {
            //Delegates to each element is DOM as it manipulated or generated
    });
    
于 2013-06-12T04:18:10.510 回答
2

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

$(selector).live("click", ...)从 1.7 开始不推荐使用,从 1.9 开始从 jQuery 中删除,不灵活(它总是绑定到document),效率极低(它首先找到元素,然后丢弃选择并使用选择器),需要将选择器存储在 jquery 对象中,并且一般是坏的。

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

bind并且delegateon. 前者不能委托,后者必须委托。它们的参数顺序也不同 -on在这里解决这个问题。它们已被 取代on,但并未被弃用(从 jQuery 1.10 开始)。如果您必须使用旧版本的 jQuery(1.7 之前),它们就在那里。否则,坚持on。他们当前的实现只是重定向到on.

click, mouseOver,change许多其他作为 和 的双重on别名trigger。从字面上看 - 他们除了分支到其中一个之外什么都不做。它们中的大多数从一开始就存在并且它们很方便简洁。但是,它们不能委托,并且没有相应的解除绑定方法。如果你使用off,它看起来更好地补充它on。一个不错的特性是它们具有跨浏览器兼容性的承诺。或者至少是一个记录任何缺乏跨浏览器支持的地方(即:load图像)。我个人的偏好是即使在足够on的情况下也可以使用。click

于 2013-06-12T04:48:31.280 回答
1

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

于 2013-06-12T04:20:18.170 回答