dom0级仅支持冒泡阶段的单一事件处理器,dom2级支持捕获与冒泡双阶段、可添加多个监听器并精确控制阶段;dom0级通过属性赋值绑定且会覆盖,dom2级用addeventlistener()可共存;dom0级在目标阶段执行且晚于同阶段dom2级监听器,移除需赋null,dom2级须用removeeventlistener()配相同引用。

DOM0级和DOM2级事件处理机制在绑定方式、事件流支持、执行顺序和灵活性上存在本质差异。核心区别在于:DOM0级只支持冒泡阶段的单一事件处理器,而DOM2级支持捕获与冒泡双阶段、可添加多个监听器,并能精确控制阶段。
绑定方式与覆盖行为
DOM0级通过元素属性(如 onclick)直接赋值函数,每次赋值会覆盖前一个;DOM2级使用 addEventListener() 添加监听器,允许多个同类型事件处理器共存。
- DOM0级示例:
btn.onclick = handler1; btn.onclick = handler2;→ 只执行handler2 - DOM2级示例:
btn.addEventListener('click', handler1); btn.addEventListener('click', handler2);→ 两个都会执行(按注册顺序)
事件流阶段支持
DOM0级事件监听器**仅在冒泡阶段触发**,无法介入捕获阶段;DOM2级可通过第三个参数(useCapture)显式指定在捕获阶段(true)或冒泡阶段(false 或省略)执行。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 捕获阶段:从
document→html→body→ 目标父元素 → 目标元素(由外向内) - 冒泡阶段:从目标元素 → 父元素 →
body→html→document(由内向外) - 目标阶段:事件到达绑定元素本身,此时捕获与冒泡参数均有效(但执行顺序固定为先捕获后冒泡,目标阶段视为两者交界)
执行顺序规则
当多个事件监听器共存时,执行顺序遵循「阶段优先 + 注册顺序」原则:
- 先执行所有捕获阶段监听器(按祖先到目标的顺序),其中同一元素上的多个捕获监听器按注册先后执行
- 再执行目标阶段监听器(包括 DOM0 级和
addEventListener绑定在目标上的监听器);DOM0 级始终在目标阶段执行,且晚于同阶段的 DOM2 级监听器 - 最后执行冒泡阶段监听器(按目标到祖先的顺序),同一元素上的多个冒泡监听器也按注册先后执行
移除与兼容性
DOM0级通过赋值 null 移除(如 btn.onclick = null),但无法精准移除某一个处理器(因无引用保存);DOM2级必须用 removeEventListener() 配合相同函数引用和参数才能移除,否则无效。现代浏览器全面支持 DOM2 级,IE8 及更早版本仅支持 DOM0 级(IE9+ 开始支持 addEventListener)。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










