bubbles属性表示事件是否设计为冒泡:true表示会冒泡(如click),false表示不冒泡(如focus);自定义事件可配置,且其值不受stopPropagation影响。

事件对象的 bubbles 属性是一个只读布尔值,它直接告诉你:这个事件**是否参与冒泡阶段**。
bubbles 为 true 表示事件会冒泡
大多数常用事件(如 click、mousedown、keyup、input)默认都支持冒泡,它们的 bubbles 值就是 true。这意味着当事件在目标元素上触发后,会自动沿着父级链向上逐层传播,直到 document 或 window。
- 例如点击一个按钮:
<div><button>点我</button></div>,只要按钮和 div 都绑了click监听器,且没被中途阻止,就会按顺序执行:按钮 → div → body → document - 此时在任一监听器中打印
event.bubbles,结果都是true
bubbles 为 false 表示事件不会冒泡
有些事件天生不冒泡,比如 focus、blur、scroll、load(在 img 上)、mouseenter 和 mouseleave。它们的 bubbles 值恒为 false。
- 你给
input元素绑定focus事件,它的父div即使也监听了focus,也不会被触发 - 检查事件对象:
event.type === 'focus' && event.bubbles === false是确定无疑的
自定义事件的 bubbles 可由开发者控制
用 new Event() 或 new CustomEvent() 创建事件时,可以通过配置项显式指定是否冒泡:
立即学习“Java免费学习笔记(深入)”;
-
new Event('myclick', { bubbles: true })→event.bubbles为true -
new Event('myclick', { bubbles: false })→event.bubbles为false - 不传配置或只传空对象(
{}),默认bubbles是false
注意:bubbles 和 stopPropagation 没有因果关系
bubbles 描述的是事件的**固有行为**,不是当前是否被阻止了。即使你调用了 event.stopPropagation(),event.bubbles 的值依然不变。
- 它回答的是“这个事件设计上允不允许冒泡”,而不是“这次有没有冒泡成功”
- 想判断是否已被阻止,应结合
event.eventPhase(比如等于2表示还在目标阶段,还没开始冒泡)或逻辑标记


















