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

为什么子元素article的click事件未冒泡到其父级p元素?

问题原因分析

核心原因

你遇到的问题和事件冒泡规则无关,本质是HTML标签嵌套规则不合法导致浏览器自动修正了DOM结构,两个元素根本不是你预期的父子关系:

  • HTML规范明确规定<p>(段落标签)仅允许嵌套行内元素(比如<span>、<a>、<strong>等),不允许嵌套<article>、<div>这类块级元素。
  • 当浏览器解析到你写的<p id="para">内部出现<article>标签时,会自动提前闭合<p>标签,最终实际生成的DOM结构如下:
<p id="para"></p>
<article id="article">Click Me!</article>
<!-- 剩下的</p>会被浏览器判定为无效标签直接忽略 -->

这时候<article>和<p>是同级兄弟关系,自然不存在事件冒泡的父子链路,点击<article>当然不会触发<p>上绑定的点击事件。

额外现象解释

你取消注释<article>的事件监听后事件能正常触发,是因为该事件是直接绑定到<article>元素本身的,和DOM嵌套结构、冒泡逻辑都没有关系,只要点击对应元素就会触发。

修复方案

把外层的<p>标签替换为允许嵌套块级元素的容器标签(比如<div>)即可,修改后的HTML如下:

<div id="para">
    <article id="article">Click Me!</article>
</div>

修改后两个元素是正常的父子嵌套关系,点击<article>的事件就会正常冒泡到父级元素,触发绑定的回调。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:01