事件冒泡和事件捕获
1. 事件冒泡
1.1 简介
即事件由子元素向父元素传播,就像气泡从水底向水面上浮一样。
<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li onclick='alert("li");'>test</li>
</ul>
</div> 上面的代码,我们单击 test 时,会依次触发 alert(“li”), alert(“ul”), alert(“div”),这就是事件冒泡。
1.2 如何取消事件冒泡
防止冒泡和捕获:
w3c 的方法是 e.stopPropagation(),IE 则是使用 e.cancelBubble = true
当需要停止冒泡时,可以使用
function stopBubble(e) {
//如果提供了事件对象,则这是一个非IE浏览器
if ( e && e.stopPropagation )
//因此它支持W3C的stopPropagation()方法
e.stopPropagation();
else
//否则,我们需要使用IE的方式来取消事件冒泡
window.event.cancelBubble = true;
} 取消默认事件:
w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;
当需要阻止默认行为时,可以使用
//阻止浏览器的默认行为
function stopDefault( e ) {
//阻止默认浏览器动作(W3C)
if ( e && e.preventDefault )
e.preventDefault();
//IE中阻止函数器默认动作的方式
else
window.event.returnValue = false;
return false;
} 2. 事件捕获
事件捕获是一个和冒泡阶段完全相反的过程,即事件由父元素向子元素传播。要说明的是,在 IE 浏览器中是不存在这个阶段的。
在 DOM 标准事件模型中,是先捕获后冒泡,但是如果要实现先冒泡后捕获的效果,对于同一个事件,监听捕获和冒泡,分别对应相应的处理函数,监听到捕获事件,先暂缓执行,直到冒泡事件被执行后再执行捕获事件。

京公网安备 11010502036488号