关于如何应用jQuery的event.stopPropagation(),我想到了两种方法
stopPropagation()的。只有在事件处理程序( event bubbling.stopPropagation()添加到处理程序中--默认情况下,stopPropagation()将添加到所有事件处理程序中。如果由于断开连接甚至冒泡而缺少所需的行为,则相应的stopPropagation()将被删除。我想知道,在我的开发中使用stopPropagation()时,我应该具备的思维方式是这两种方式中的哪一种,或者两者都不是。我更倾向于2),因为它看起来会有更好的性能,因为不必要的冒泡得到了预防。我想听取有关这一专题的专家的意见。
发布于 2012-04-19 23:19:34
到处打电话给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>的后代,它的点击将不再被处理!请不要这样做。
发布于 2012-04-19 23:24:47
只有当你真的需要的时候才打电话给stopPropagation。请记住,如果使用jQuery live函数并停止它,则活动处理程序永远不会调用,因为live事件存储在document元素中。
https://stackoverflow.com/questions/10238191
复制相似问题