You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何点击无点击处理器的内层元素会触发外层form的捕获阶段点击事件?

这是完全符合预期的行为

原因如下:

  • 浏览器的事件传播分为捕获阶段和冒泡阶段。当你点击<p>或<div>时,事件会从最顶层的window对象开始,沿着DOM树向下传播(捕获阶段),最终到达被点击的目标元素。
  • 你给<form>绑定click事件时,第三个参数设为true,这意味着该事件监听函数会在捕获阶段触发。当点击事件的捕获路径经过<form>时,自然会触发这个监听函数,输出capturing form。
  • 你给<div>和<p>绑定的是focus事件,而非click事件,点击操作不会触发focus类型的事件,所以这两个元素的监听函数不会执行。

如果想让<form>仅在自身被点击时才触发事件,可以在处理函数中判断事件目标是否为<form>本身:

form.addEventListener("click", e => {
  if(e.target === form){
    console.log("capturing form")
  }
}, true);

内容的提问来源于stack exchange,提问作者user19481364

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:31:01