3

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

所以告诉我:

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

鼓励每个人就此事发表他们的专家意见。

提前谢谢了。

4

2 回答 2

4

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

从 1.7 开始on()是首选用途,live()已弃用且根本不推荐使用。如果您使用的是 1.3,请使用1.4.2bind()代替和自 1.7 使用,而不是其他任何一个。live()delegate()live()on()

关于$("selector").click. 取自click() 文档

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

为什么使用 on() 而不是其他的?
on()是最新添加的,在 1.7 版中加入了 jQuery 库。on()具有多个方法签名,使其能够提供与以前版本相同的结果,但经过改进和优化。从文档中引用:

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

基本上没有必要使用bind()delegate()不再使用。当然它会起作用,并且使用这些方法应该没有害处,但我始终认为最新添加的内容已针对以前版本的任何缺点进行了优化和改进(除非文档中另有说明,因为在 的情况下live()) .
基于此,我建议on()改用。

live()不推荐句号的原因更多是与它的缺点有关。从live() 文档中引用。

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

  • jQuery 在调用 .live() 方法之前尝试检索选择器指定的元素,这在大型文档上可能很耗时。
  • 不支持链接方法。例如, $("a").find(".offsite, .external").live( ... ); 无效且无法按预期工作。
  • 由于所有 .live() 事件都附加在文档元素上,因此事件在处理之前会采用最长和最慢的路径。
  • 在移动 iOS(iPhone、iPad 和 iPod Touch)上,大多数元素的 click 事件不会冒泡到文档正文,并且如果不应用以下解决方法之一,则不能与 .live() 一起使用:
    1. 使用原生可点击元素,例如 a 或按钮,因为这两个元素都会冒泡到文档中。
    2. 使用 .on() 或 .delegate() 附加到 document.body 级别以下的元素,因为移动 iOS 确实会在 body 中冒泡。
    3. 将 CSS 样式 cursor:pointer 应用到需要冒泡点击的元素(或包含 document.documentElement 的父元素)。但是请注意,这将禁用元素上的复制\粘贴,并使其在触摸时突出显示。
  • 在事件处理程序中调用 event.stopPropagation() 无法停止附加在文档下方的事件处理程序;该事件已经传播到文档。
  • .live() 方法以令人惊讶的方式与其他事件方法进行交互,例如,$(document).unbind("click") 删除了所有对 .live() 的调用附加的点击处理程序!

不过,文档中还有很多好东西。

其他资源
click()
bind()
live() (不要使用)
delegate()
on()

于 2012-06-21T23:03:32.757 回答
1

在这种特殊情况下,功能没有区别。然而,.on它比.bindjQuery 1.7 更受欢迎,而且对于.click- 它只是一个通用事件处理程序的简写。

于 2012-06-21T23:01:23.910 回答