$(sel).bind(“click”,$(sel).click(,$(sel).live(“click”,$(sel).on(“click”?

我已经使用了很长一段时间,但是大多数时候,我更喜欢较短的一个,但是我只是想深入了解这些细节。 我可能一直在创buildbuggy代码,我不想贡献和在网上传播懒惰的代码。

所以告诉我:

它们之间有哪些显着的优点/缺点呢,还是它就像冰淇淋一样,口味不同,但是感觉相同呢?

鼓励每个人就这个问题提出专家意见。

提前谢谢了。

在1.0中添加bind() ,在1.3中添加live() ,在1.4.2中添加delegate()和在1.7中添加on()

从1.7 on()是首选用法,而live()已经被弃用,根本不被推荐。 如果您使用的是使用bind()而不是live() ,并且从1.4.2开始使用delegate()而不是live()并且使用1.7而不是其他任何使用。

关于$("selector").click 。 从click() 文档取得

在前两个变体中,这个方法是jQuery 1.7的.bind(“click”,handler)以及.on(“click”,handler)的一个快捷方式。 在第三个变体中,当.click()不带参数被调用时,它是.trigger(“click”)的快捷方式。

为什么使用on()而不是其他的?
on()是最新的补充,join了1.7版本的jQuery库。 on()有几个方法签名,使得它可以提供与之前版本相同的结果,但是进行了改进和优化。 从文档引用:

从jQuery 1.7开始,.on()方法提供了附加事件处理程序所需的全部function。

有bascialy不再需要使用bind()delegate() 。 当然这样做会起作用,使用这些方法应该没有什么坏处,但是我总是会认为,最新的增加对以前版本的任何缺点进行了优化和改进(除非文档中另有说明,就像live()的情况一样live() )。
基于此,我会build议使用on()来代替。

live()不是build议全站的原因更多的是它的缺点。 引用live() 文档

不再推荐使用.live()方法,因为更高版本的jQuery提供了没有缺点的更好的方法。 尤其是,使用.live()会出现以下问题:

  • jQuery尝试在调用.live()方法之前检索由select器指定的元素,这在大型文档上可能非常耗时。
  • 链接方法不受支持。 例如,$(“a”)。find(“。offsite,.external”)。live(…); 无效并且不能按预期工作。
  • 由于所有.live()事件都附加在文档元素处,因此事件在处理之前会采用最长和最慢的path。
  • 在移动iOS(iPhone,iPad和iPod Touch)上,单击事件对于大多数元素不会冒泡到文档正文,不能与.live()一起使用,而不应用以下解决方法之一:
    1. 使用本地可点击的元素,如a或button,因为这两个元素都会冒泡到文档中。
    2. 使用.on()或.delegate()附加到document.body级别以下的元素,因为移动iOS在主体内部起泡。
    3. 将CSS样式游标:指针应用于需要点击的元素(或包含document.documentElement的父元素)。 但是请注意,这将禁用元素上的复制\粘贴,并在触摸时使其突出显示。
  • 在事件处理程序中调用event.stopPropagation()在停止附加在文档中较低位置的事件处理程序时无效; 该事件已经传播到文件。
  • .live()方法与其他事件方法以令人惊讶的方式交互,例如,$(document).unbind(“click”)将删除所有对.live()的调用附加的点击处理程序!

尽pipe在文档中还有很多好东西。

其他资源
点击()
绑定()
live()(不要使用)
代表()
上()

这种特殊情况下的function没有区别。 然而, .on.on 1.7更好,而.on – 它只是普通事件处理程序的缩写。