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

2024-04-29

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

所以告诉我:

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

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

提前谢谢了。


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

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

关于$("selector").click。取自click() 文档 http://api.jquery.com/click/:

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

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

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

基本没有必要使用bind() or delegate()不再了。当然它会起作用,并且使用这些方法应该没有什么坏处,但我总是假设最新的添加内容针对以前版本的任何缺点进行了优化和改进(除非文档另有说明,就像在情况下一样)live()).
基于此我建议使用on()反而。

原因live()不推荐完全停止更多的是因为它的缺点。引用自live() 文档 http://api.jquery.com/live.

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

  • jQuery 尝试检索选择器指定的元素 在调用 .live() 方法之前,这可能会很耗时 大文档。
  • 不支持链接方法。例如, $("a").find(".offsite, .external").live( ... );无效并且确实 不按预期工作。
  • 由于所有 .live() 事件都附加在文档元素上,因此事件 在处理它们之前,采取尽可能最长和最慢的路径。
  • On mobile iOS (iPhone, iPad and iPod Touch) the click event does not bubble to the document body for most elements and cannot be used with .live() without applying one of the following workarounds:
    1. 使用本机可点击元素,例如 或 按钮,因为这两者 做气泡记录。
    2. 使用 .on() 或 .delegate() 附加到 document.body 级别以下的元素, 因为移动iOS确实在体内冒泡。
    3. 将CSS样式cursor:pointer应用到需要冒泡的元素上 点击次数(或包含 document.documentElement 的父级)。但请注意, 这将禁用元素上的复制\粘贴并使其成为 触摸时突出显示。
  • 在事件处理程序中调用 event.stopPropagation() 是无效的 停止附加在文档下方的事件处理程序;该活动有 已经传播到文档。
  • .live() 方法与其他事件方法交互的方式可以 令人惊讶的是,例如 $(document).unbind("click") 删除所有点击 任何调用 .live() 都会附加处理程序!

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

其他资源
click() http://api.jquery.com/click/
bind() http://api.jquery.com/bind
live()(不要使用) http://api.jquery.com/live
代表() http://api.jquery.com/delegate/
on() http://api.jquery.com/on/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$(sel).bind("click", $(sel).click(, $(sel).live("click", $(sel).on("click") 之间有什么显着差异? 的相关文章