0

关于如何应用 jQuery,我有两种方法event.stopPropagation()

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

我想知道stopPropagation()在我的开发中使用这两者中的哪一个,或者两者都不是。我更倾向于 2),因为它看起来会具有更好的性能,因为可以防止不必要的冒泡。我想听听有关该主题的专家的意见。

4

2 回答 2

3

到处打电话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();
});

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

于 2012-04-19T23:19:34.023 回答
1

stopPropagation仅在您确实需要时才致电。请记住,如果您使用 jQuerylive函数并停止它,则实时处理程序永远不会调用,因为live事件存储在documentelement.

于 2012-04-19T23:24:47.480 回答