关于如何应用jQuery的event.stopPropagation()
:
stopPropagation()
。只有在事件冒泡导致某些不必要和不受欢迎的行为时,才会将stopPropagation()
添加到处理程序中。stopPropagation()
会添加到所有事件处理程序中。如果由于连接冒泡而导致某些所需行为丢失,则相应的stopPropagation()
将被删除。我想知道在我的开发中使用stopPropagation()
时,我应该拥有的两种思维模式中的哪一种,或者两者都不是。我更倾向于2)因为看起来它会有更好的性能,因为防止了不必要的冒泡。我想听听专家的意见。
答案 0 :(得分: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>
后代的任何<div>
将不再处理其点击次数!请不要这样做。
答案 1 :(得分:1)
仅在您确实需要时才致电stopPropagation
。请记住,如果您使用jQuery live
函数并停止它,则永远不会调用实时处理程序,因为live
事件存储在document
元素中。