gpt4 book ai didi

jquery - 我应该使用 .live(...) 吗?

转载 作者:行者123 更新时间:2023-12-01 02:04:16 25 4
gpt4 key购买 nike

当我使用 jQuery 将事件附加到元素时,我通常这样做:

$(document).ready(function() {
$('#some_id').click(function() {
// Do some stuff
});
});

但是,我见过很多这样做的例子:

$('#some_id').live('click', function() {
// Do some stuff
});

(几乎总是没有ready包装器。)

如果元素已经在页面中并且不会去任何地方,那么这种或另一种方式是否有缺点?

最佳答案

.live() 有许多缺点,因此我将其使用限制在以下情况:

  1. 大量元素需要绑定(bind)到同一个事件处理程序,或者
  2. 经常添加或删除元素。

.live() 的工作原理是将事件处理程序附加到 document,并检查 event.target 是否与给定的选择器匹配。结果是:

  • 当点击 #some_id 以外的元素时,会对选择器进行不必要的检查。
  • 没有机会stopPropagation()该事件,因为它已经到达根(尽管您仍然可以preventDefault())。
  • 类似地,附加到 #some_id父级的点击处理程序(通过 .click().bind()),返回 falsestopPropagation() 将使通过 .live() 附加的处理程序静音,因为事件将不再到达根.
  • 只能选择器(字符串)一起使用。
  • 可能会导致意外的事件处理顺序,因为事件将按其绑定(bind)顺序触发,而不是按冒泡顺序(子级到父级)。
  • 如果元素被删除,事件也不会被删除。
  • 虽然很少见,但您不能在元素上使用 .triggerHandler()

关于jquery - 我应该使用 .live(...) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com