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则发生在捕获阶段。
高程上写,事件绑定在冒泡阶段可以最大限度兼容各大浏览器。