关于如何应用jQuery的event.stopPropagation()
,我想到了两种方法:
1.乐观方法-默认情况下,所有事件处理程序都***不带***stopPropagation()
。只有当事件冒泡导致某些不必要和不希望的行为时,才会将stopPropagation()
添加到处理程序中。
1.悲观方法-默认情况下,stopPropagation()
被添加到所有事件处理程序中。如果由于断开连接甚至冒泡而缺少某些所需的行为,则相应的stopPropagation()
将被删除。
我想知道在我的开发中使用stopPropagation()
时,这两种心态中哪一种是我应该拥有的,或者都不是。我更倾向于2),因为它看起来会有更好的性能,因为不必要的冒泡被阻止了。我想听听Maven对这个主题的看法。
2条答案
按热度按时间fcg9iug31#
在任何地方调用
stopPropagation
都不好,它会破坏事件委托 *,可能效率更低,除非你真的为页面上的每个元素添加处理程序(如果你这样做,你应该使用事件委托),而且你可能不记得这样做。因此,经验法则是:只有在需要时才调用
stopPropagation
。.live
、.delegate
和.on
的委派版本。下面是一个事件委托的示例,它依赖于冒泡来侦听源自创建侦听器 * 之后 * 添加的元素的事件:
下面的jQuery打破了这一点:
任何
<div>
的后代<a>
将不再处理其点击!请不要这样做。t9aqgxwy2#
请记住,如果您使用jQuery
live
函数并停止它,live处理程序将不会调用,因为live
事件存储在document
元素中。