首页 > 开发 > JS > 正文

为什么DOM级事件处理程序是在冒泡阶段被调用?

2017-09-05 05:51:25  来源:网友分享

0 环境

chrome最新版

1.我在学《JS高程》的DOM0级事件处理程序时,通过event.eventPhase这个接口发现:DOM级事件处理程序是在冒泡阶段被捕获。

2.测试代码

测试代码的仓库位置:https://github.com/AChaoZJU/F...

<!DOCTYPE html><html><head>    <style>    </style></head><body>    <button id="myBtn">Love JS</button>    <script>        var btn = document.getElementById('myBtn');        var handle = function() { //添加事件和移除事件的回调函数必须是同一个            console.log("in target event" + event.eventPhase);        }        document.body.onclick = function() {            console.log("事件冒泡" + event.eventPhase);        }        btn.onclick = handle;    </script></body></html>

测试结果:

我们可以看到打印的event.eventPhase:3,表明事件处理程序是在冒泡阶段被调用。

3 我的问题

可是DOM级事件处理程序难道不应该用的是DOM事件流吗?DOM级事件流不是可以在两个阶段调用事件处理程序吗(事件捕获阶段和事件冒泡阶段)?为什么只在冒泡阶段被调用?

解决方案

DOM0级发生在冒泡阶段
DOM2级默认发生在冒泡阶段,第三个参数为TRUE则发生在捕获阶段。
高程上写,事件绑定在冒泡阶段可以最大限度兼容各大浏览器。