问题描述:
用户操作一个节点,该节点会响应函数这是一定的,那么当事件发生在他的爸爸身上时,他会相应吗?而当事件发生在他的儿子身上时,他会相应吗?显而易见,后者成立,可以理解为全局变量会在局部函数中被改变。
加深理解:
这种后代向祖先传递事件的过程是怎么发生的呢?
-
捕获阶段: 事件从祖先传递给后代,但是不触发事件
-
目标阶段: 上一步停止于最年起且有绑定事件响应函数的后代
-
传播阶段: 由后代至祖先,层层向外,触发事件(有的祖先没有绑定函数也没事,继续传递触发)
注意: addEventListener()的第三个参数,false传播阶段执行事件 true捕获阶段执行事件,一般使用false
取消冒泡的方法:
function stopBubble(e) {
//如果提供了事件对象,则这是一个非IE浏览器
if (e && e.stopPropagation) {
//因此它支持W3C的stopPropagation()方法
e.stopPropagation();
}
else {
//否则,我们需要使用IE8的方式来取消事件冒泡
window.event.cancelBubble = true;
}
}
c1.onclick = function (e) {
alert('单击了div');
stopBubble(e);
};
c2.onclick = function (e) {
alert('单击了div');
stopBubble(e);
};
document.onclick = function (e) {
alert('单击了document');
};