JavaScript事件流、冒泡机制及事件处理详解
本文详解JavaScript中的事件流概念,对比IE冒泡流与Netscape捕获流。重点解析事件冒泡的执行顺序及浏览器差异,并提供获取兼容事件对象、停止冒泡(stopPropagation/cancelBubble)及阻止默认行为(preventDefault/returnValue)的标准代码实现,帮助开发者掌握跨浏览器事件控制。
1、事件流
JavaScript事件流与冒泡机制
事件流描述了页面中接收事件的具体顺序。历史上,IE浏览器提出了冒泡流的概念,而Netscape Communicator则提出了捕获流的概念。
2、事件冒泡(event bubbling)
事件冒泡是指事件从最具体的元素(即嵌套层次最深的节点)开始接收,然后逐级向上传播给较不具体的节点(直至文档)。示例结构如下:
代码如下:
<html>
<head>
<title>事件冒泡</title>
</head>
<body>
<div id="myDiv">点击我</div>
</body>
</html>
window.onload = function(){
var obj = document.getElementById("test");
obj.onclick = function(){
alert(this.tagName);
};
document.body.onclick = function(){
alert(this.tagName);
};
document.documentElement.onclick = function(){
alert(this.tagName);
};
document.onclick = function(){
alert("document");
};
window.onclick = function(){
alert("window");
}
};
事件传播顺序:div——>body——>html——>document
注意: 现代所有浏览器都支持冒泡事件,但实现还有一些差别。IE5.5及更早版本中的事件冒泡会直接从body跳到document(不执行html)。Firefox、Chrome和Safari则将事件一直冒泡到window对象。
停止事件冒泡与阻止默认行为
3、停止事件冒泡和取消默认事件
a. 获取事件对象
代码如下:
function getEvent(event) {
// window.event IE
// event 非IE
return event || window.event;
} b 功能:停止事件冒泡
代码如下:
function stopBubble(e) {
// 如果提供了事件对象,则这是一个非IE浏览器
if ( e && e.stopPropagation ) {
// 因此它支持W3C的stopPropagation()方法
e.stopPropagation();
} else {
// 否则,我们需要使用IE的方式来取消事件冒泡
window.event.cancelBubble = true;
}
}
c. 阻止浏览器的默认行为
代码如下:
function stopDefault( e ) {
// 阻止默认浏览器动作(W3C)
if ( e && e.preventDefault ) {
e.preventDefault();
} else {
// IE中阻止函数器默认动作的方式
window.event.returnValue = false;
}
return false;
}JS怎么实现页面强制刷新
2026-11-05 14:53:38
点击JS链接直接运行不下载?前端实现.js文件强制下载的三种方法
2026-11-05 12:12:23
怎么封装一个通用的JS创建元素辅助函数
2026-11-05 11:41:41
Swiper.js 怎么监听滑动结束并获取当前索引
2026-11-05 10:57:15
HTML、CSS和JS的关系:Web前端三件套怎么协作
2026-11-04 15:41:40
