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

疑问:为何Targeting phase未将点击事件从div2传播到div1?

问题解答

先把事件传播的三个核心阶段掰明白:

  • 捕获阶段:事件从最外层祖先元素向下传递,直到抵达实际被点击的目标元素
  • 目标阶段:事件仅在被点击的目标元素本身处理,不会涉及父元素
  • 冒泡阶段:事件从目标元素向上回溯到最外层祖先元素,沿途父元素如果注册了冒泡类型的事件(addEventListener默认不带第三个参数或设为false时就是冒泡监听),就会被触发

你应该是误解了MDN的描述——目标阶段根本不会将事件传播到父元素,它只负责处理目标元素自身的事件绑定。当你点击div2时:

  1. 首先进入捕获阶段:事件从document向下传递到div2,由于div1没有注册捕获阶段的事件,这一步不会有任何触发
  2. 然后是目标阶段:处理div2的事件,但你没有给div2绑定点击事件,所以这一步无输出
  3. 最后进入冒泡阶段:事件从div2向上传递到div1,div1注册了冒泡阶段的点击事件,因此会触发phase函数,输出BUBBLING_PHASE: 1

你觉得“事件没传播到div1”,是混淆了目标阶段和冒泡阶段的职责——向上传递事件是冒泡阶段的工作,而非目标阶段。实际运行代码点击div2,就能看到log里确实会出现div1的冒泡阶段输出。

额外补充:如果想让div1在捕获阶段就触发事件,只需修改addEventListener的第三个参数为true:

div1.addEventListener("click", phase, true);

这时候点击div2,捕获阶段就会触发div1的事件,输出CAPTURING_PHASE: 1,之后冒泡阶段还会再触发一次(除非用stopPropagation阻止事件传播)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:40:26