这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
前言
其实从英文翻译propagation是传播; 扩展; 宣传; 培养;(来自百度翻译)。所以我们常说的及一些文档里提到stopPaopagation是阻止冒泡是会让人产生误解。因此英文文档阅读能力很重要。
首先先下个结论:stopPropagation方法不是大家说的阻止冒泡,而是阻止传递(捕获 + 冒泡);
代码验证
前段时间看到一道考题,题目是这样的:
1、使用js原生方法addEventListener给parent和child均绑定click事件,分别关联onClickParent和onClickChild回调
2、需要点击child,只有onClickParent被触发,onClickChild回调不能被执行。
<div class="parent">
<div class="child"></div>
</div>
看到第二问的时候我在想平常遇到的都是子被执行,父不执行,阻止冒泡即可。根据题意需要在捕获阶段执行,那有没有什么方法可以阻止捕获呢?我开始对stopPropagation是阻止冒泡这个方法产生了怀疑。
写代码试试在捕获阶段执行的函数里使用stopPropagation,结果是可以阻止后续事件发生的。
本题完整js代码
var parent=document.getElementsByClassName('parent')[0]
var child=document.getElementsByClassName('child')[0]
parent.addEventListener('click', onClickParent,true);
child.addEventListener('click', onClickChild);
function onClickParent(e){
e.stopPropagation()
}
function onClickChild(e){
}