$(sel).bind(“click”,$(sel).click(,$(sel).live(“click”,$(sel).on(“click”?)之间有什么显着差异?

时间:2012-06-21 22:58:49

标签: jquery onclick click bind mouseclick-event

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

所以,告诉我:

  

它们之间有哪些显着的优点/缺点,或者它是什么   就像冰淇淋,不同的口味,但同样“感觉良好”的效果?

鼓励每个人就此事提出专家意见。

非常感谢提前。

2 个答案:

答案 0 :(得分:4)

bind()已添加到1.0,live()位于1.3,delegate()位于1.4.2,on()位于1.7。

从1.7开始on()是首选用途,live()已被弃用,根本不推荐使用。 如果您使用的是1.3使用bind()而不是live(),则从1.4.2开始使用delegate()代替live(),从1.7开始使用on()代替任何$("selector").click其他人。

关于click()。取自on() documentation

  

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

为什么使用on()而不是其他?
on()是最新版本,加入1.7版本的jQuery库。 bind()有几个方法签名,使其能够提供与先前版本相同但经过改进和优化的结果。引用documentation

  

从jQuery 1.7开始,.on()方法提供了所需的所有功能   用于附加事件处理程序。

不再需要使用delegate()live()。当然它会起作用,使用这些方法应该没有任何害处,但我总是假设最新增加的内容在以前版本的任何缺点上都得到了优化和改进(除非文档另有说明,因为它是{ {1}})。
基于此,我建议改为使用on()

不推荐live()全面停止的原因更多的是它的缺点。引用live() documentation

  

以后不再推荐使用.live()方法   jQuery的版本提供了更好的方法,没有它   缺点。特别是,使用时会出现以下问题   .live():

     
      
  • jQuery尝试检索选择器指定的元素   在调用.live()方法之前,这可能非常耗时   大文件。
  •   
  • 不支持链接方法。例如,$(“a”)。find(“。offsite,.external”)。live(...);是无效的   没有按预期工作。
  •   
  • 由于所有.live()事件都附加在文档元素,事件中   在处理之前采取最长和最慢的路径。
  •   
  • 在移动iOS(iPhone,iPad和iPod Touch)上,点击事件不会   为大多数元素冒泡到文档正文并且不能使用   .live()而不应用以下变通办法之一:   
        
    1. 使用本机可点击的元素(如a或按钮)作为这两者   泡泡到文件。
    2.   
    3. 使用.on()或.delegate()附加到document.body级别下面的元素,   因为移动iOS确实会在体内冒泡。
    4.   
    5. 将CSS样式光标:指针应用于需要冒泡的元素   点击(或包含document.documentElement的父级)。但请注意,   这将禁用元素上的copy \ paste并使其成为   触摸时突出显示。
    6.   
  •   
  • 在事件处理程序中调用event.stopPropagation()无效   停止文件中较低的事件处理程序;事件有   已经传播到文件。
  •   
  • .live()方法可以通过其他方式与其他事件方法进行交互   令人惊讶的是,例如,$(document).unbind(“click”)删除所有点击   通过调用.live()!
  • 附加的处理程序   

但是文档中还有很多好东西。

其他资源
click()
bind()
live() (don't use)
delegate()
on()

答案 1 :(得分:1)

在特定情况下功能没有区别。但是,从jQuery 1.7开始,.on优于.bind,而.click优先于{{1}} - 它只是公共事件处理程序的简写。