只是想知道click()
, live()
和on()
中哪一个是目前捕获用户鼠标点击的首选方法?
我认为live()
已经退出,因为我相信这扫描了大部分DOM。
谢谢。
From jquery docs:
从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()
不支持使用live()
和.bind()
方法。live()
也被删除了,因为其他两个是两个完全不同类型的事件处理程序。
-
.click()
是标准的事件处理程序.click(function() { //Applies to DOM already present });
-
.on()
在需要事件委托时使用。这取代了传统的bind()
和delegate()
.on('click', function() { //Delegates to each element is DOM as it manipulated or generated });
但是jQuery 1.9不支持live函数,你应该使用"on"
TL;DR: live
已弃用,bind
和delegate
被取代,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
和delegate
是on
的表兄妹。前者不能授权,后者必须授权。它们的参数顺序也不同——on
在这里解决了这个问题。它们已经被on
取代,但是还没有被弃用(从jQuery 1.10开始)。如果您必须使用旧版本的jQuery(1.7之前),那么它们就在那里。否则,坚持on
。它们当前的实现仅仅重定向到on
。
click
, mouseOver
, change
和许多其他作为on
和trigger
的双重功能别名。从字面上看,他们什么也不做,只是分支到其中一个。他们中的大多数从时间之初就存在了,他们很容易意识到。但是,它们不能委托,也没有相应的解绑定方法。如果您使用off
,那么用on
补充它看起来更好。一个很好的特性是它们承诺跨浏览器兼容。或者至少有一个地方可以记录任何缺乏跨浏览器支持的情况(即:图像的load
)。我个人倾向于使用on
,即使在click
已经足够的情况下。
"On"是首选方法,因为将来你可以很容易地将其更改为"mouseup", "mousedown"。