JavaScript中attachEvent与addEventListener的使用区别及事件冒泡原理
本文详解JavaScript中addEventListener与attachEvent两种事件绑定方法的语法差异,重点解析useCapture参数对事件捕获与冒泡顺序的影响,并提供跨浏览器兼容处理及移除事件的完整代码示例。
事件绑定方法的基本语法差异
在Firefox等标准浏览器中,绑定事件的标准语法为:对象名.addEventListener("事件名(不带ON前缀)", 函数名, true或false)。
在Internet Explorer旧版本中,绑定事件的语法为:对象名.attachEvent("事件名(带ON前缀)", 函数名)。
具体说明如下:
关于事件名称,需注意标准写法。例如,onclick应写为click,onblur应写为blur,即事件名不应包含"on"前缀。
useCapture参数与事件响应顺序
关于函数名,调用时不要添加括号。最后一个参数为布尔值,用于指定事件的响应顺序。下文将重点介绍addEventListener的第三个参数useCapture。若useCapture为true,浏览器采用捕获(Capture)模式;若为false,则采用冒泡(bubbling)模式。建议使用false,具体效果见下文示例。
HTML结构示例:
<div id="div_test"> <input type="button" id="btn_test" value="se4.cn技术基地" /> </div>
JavaScript逻辑示例:
代码如下:
window.onload=function(){ document.getElementById("div_test").addEventListener("click",test1,false); document.getElementById("btn_test").addEventListener("click",test2,false); } function test1(){ alert("外层div触发") } function test2(){ alert("内层input触发") } 读者可自行测试:若将useCapture设置为true,则test1(外层div)先触发;若设置为false,则test2(内层input)先触发。
接下来介绍attachEvent方法。
该方法较为常见,此处不再赘述基础用法,重点在于参数传递部分,后续结合实际应用场景再行讨论。
具体示例:
跨浏览器事件绑定与移除示例
创建事件绑定的兼容写法:
代码如下:
if (typeof document.addEventListener != "undefined") {
document.addEventListener("mousedown",_lhlclick,true);
} else {
document.attachEvent("onmousedown",_lhlclick);
} 移除事件的兼容写法:
代码如下:
if (typeof document.addEventListener != "undefined") {
document.removeEventListener("mousedown",_lhlclick,true);
} else {
document.detachEvent("onmousedown",_lhlclick);
} AOS.js 动画不触发怎么办?排查 DOM 加载与移动端兼容问题
2026-11-05 17:02:26
sigma.js 怎么实现节点点击、拖拽与悬停提示交互
2026-11-05 15:03:27
Matter.js 与 PixiJS/Three.js 集成:分离物理计算与渲染
2026-11-05 13:43:48
主流JS弹幕库选型指南:Danmaku.js等库的功能与体积对比
2026-11-05 09:28:19
JavaScript点击事件监听与交互效果实例
2026-11-05 09:10:19
