首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jQuery的event.stopPropagation()的正确心态是什么?

使用jQuery的event.stopPropagation()的正确心态是什么?
EN

Stack Overflow用户
提问于 2012-04-19 23:17:24
回答 2查看 187关注 0票数 0

关于如何应用jQuery的event.stopPropagation(),我想到了两种方法

  1. 乐观方法-默认情况下,所有事件处理程序都是没有 stopPropagation()。只有在事件处理程序( event bubbling.
  2. Pessimistic )方法导致一些不必要的和不需要的行为时,才会将stopPropagation()添加到处理程序中--默认情况下,stopPropagation()将添加到所有事件处理程序中。如果由于断开连接甚至冒泡而缺少所需的行为,则相应的stopPropagation()将被删除。

我想知道,在我的开发中使用stopPropagation()时,我应该具备的思维方式是这两种方式中的哪一种,或者两者都不是。我更倾向于2),因为它看起来会有更好的性能,因为不必要的冒泡得到了预防。我想听取有关这一专题的专家的意见。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-19 23:19:34

到处打电话给stopPropagation是不好的。它打破了事件委派*,除非您真的将处理程序添加到页面上的每个元素(如果您正在这样做,您应该使用事件委托),否则效率可能会降低,而且您可能不记得这样做。

因此,经验法则:只在需要时才调用stopPropagation

*即.live.delegate.on的委托版本。

下面是一个事件委托的示例,它依赖冒泡来侦听来自创建侦听器后添加的元素的事件:

代码语言:javascript
复制
document.documentElement.addEventListener('click', function(e) {
    if(e.target.nodeName === 'a') {
        console.log('A link was clicked!');
    }
});

这里有人加入了jQuery,打破了这一点:

代码语言:javascript
复制
$('div').click(function(e) {
    e.stopPropagation();
});

任何<a>,如果是<div>的后代,它的点击将不再被处理!请不要这样做。

票数 3
EN

Stack Overflow用户

发布于 2012-04-19 23:24:47

只有当你真的需要的时候才打电话给stopPropagation。请记住,如果使用jQuery live函数并停止它,则活动处理程序永远不会调用,因为live事件存储在document元素中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10238191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档