javascript - 如何理解event.eventPhase?

标签 javascript

我对 event.eventPhase 感到困惑。请参阅下面的代码。

const e1=document.getElementById("id1");
function onclicked(e)
{
  console.log(e.eventPhase);
  console.log(e);
  alert(e.target.id+' clicked');
}

e1.addEventListener('click',onclicked,false);
e1.addEventListener('click',onclicked,true);
<div id="id1">hello world</div>

当点击“hello world”时,onclicked 函数会被调用两次。但 console.log(e.eventPhase); 始终输出 2(AT_TARGET)。更奇怪的是,console.log(e); 总是显示 e.eventPhase=0(通过单击展开 Firefox devtools 控制台中显示的结构 e)。我认为 e.eventPhase 在 onclicked 的第一次调用中应该为 1(CAPTURING_PHASE),在第二次调用中应该为 3(BUBBLING_PHASE),根据此 document .

最佳答案

为您的 div 创建包装器 id="id1" 并在其上添加相同的事件处理程序,您将在该包装器上获得捕获和冒泡阶段

因此,当您单击添加事件处理程序的元素时,它是目标,并且始终处于目标阶段,但捕获和冒泡适用于 DOM 树中更高的元素

关于javascript - 如何理解event.eventPhase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72593450/

相关文章:

javascript - THREE.js 规范化

javascript - 从两个相关集合查询数据的最简洁的解决方案是什么?

javascript - 如何在DotNetNuke(DNN)中只加载一次fancybox(JS已经包含在主题和模块中)

javascript - NodeJS 应用程序的安全分发

javascript - 循环遍历 JSON 键以添加 Google map 数据

javascript - html/javascript : Is there a way to force data inputted into a text input to go into its value attribute?

javascript - fs.watch 如果文件不存在,是否有错误处理程序?

javascript - 为什么 dart2js 编译器不将 64 位整数转换为 IEEE 754 FP 数字?

javascript - Rhino 和 Javascript 1.8?

javascript - 在 JavaScript 中检查数字素数