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

toiithl6  于 2022-11-29  发布在  jQuery
关注(0)|答案(2)|浏览(108)

关于如何应用jQuery的event.stopPropagation(),我想到了两种方法:
1.乐观方法-默认情况下,所有事件处理程序都***不带***stopPropagation()。只有当事件冒泡导致某些不必要和不希望的行为时,才会将stopPropagation()添加到处理程序中。
1.悲观方法-默认情况下,stopPropagation()被添加到所有事件处理程序中。如果由于断开连接甚至冒泡而缺少某些所需的行为,则相应的stopPropagation()将被删除。
我想知道在我的开发中使用stopPropagation()时,这两种心态中哪一种是我应该拥有的,或者都不是。我更倾向于2),因为它看起来会有更好的性能,因为不必要的冒泡被阻止了。我想听听Maven对这个主题的看法。

fcg9iug3

fcg9iug31#

在任何地方调用stopPropagation都不好,它会破坏事件委托 *,可能效率更低,除非你真的为页面上的每个元素添加处理程序(如果你这样做,你应该使用事件委托),而且你可能不记得这样做。
因此,经验法则是:只有在需要时才调用stopPropagation

  • 也就是.live.delegate.on的委派版本。

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

document.documentElement.addEventListener('click', function(e) {
    if(e.target.nodeName === 'a') {
        console.log('A link was clicked!');
    }
});

下面的jQuery打破了这一点:

$('div').click(function(e) {
    e.stopPropagation();
});

任何<div>的后代<a>将不再处理其点击!请不要这样做。

t9aqgxwy

t9aqgxwy2#

请记住,如果您使用jQuery live函数并停止它,live处理程序将不会调用,因为live事件存储在document元素中。

相关问题