The bubbles property is a read-only boolean on every Event: true if the event bubbles up the DOM tree, false if it does not. Learn how to read it, set it on synthetic events, see parent listeners fire, and relate it to stopPropagation—with five examples and try-it labs.
01
Kind
Instance property
02
Type
boolean (read-only)
03
Means
Bubbles up DOM?
04
Set via
Constructor options
05
Workers
Yes
06
Status
Baseline widely
Fundamentals
Introduction
After an event reaches its target, some events continue upward through ancestors—that is bubbling. event.bubbles tells you whether this event participates in that upward trip.
You cannot assign to event.bubbles. For synthetic events, pass { bubbles: true } (or false) to new Event() (or a subclass). Built-in events get their value from the browser’s event definition.
💡
Beginner tip
A parent listener only hears a child’s event during bubbling if event.bubbles is true (and nothing called stopPropagation()). Non-bubbling events stay on the target unless you use capturing listeners.
Concept
Understanding Event.bubbles
An instance property that answers: “After the target phase, will this event travel up the ancestor chain?”
Value — true if it bubbles; false otherwise.
Read-only — set only at construction time for synthetic events.
Propagation — bubbling can be stopped with stopPropagation().
Not the same as cancelable — cancelable controls preventDefault(), not tree travel.
Baseline Widely available on MDN (since July 2015); also in Web Workers.
Foundation
📝 Syntax
JavaScript
event.bubbles
Value
A boolean: true if the event bubbles up through the DOM tree.
Set on synthetic events
JavaScript
const bubbling = new Event("look", { bubbles: true });
const local = new Event("look", { bubbles: false }); // default
console.log(bubbling.bubbles); // true
console.log(local.bubbles); // false
Compare
⚖️ bubbles vs Related Ideas
Idea
Meaning
event.bubbles
Does this event type/instance bubble?
event.cancelable
Can preventDefault() cancel the default action?
event.composed
Can it cross shadow DOM boundaries?
stopPropagation()
Stop further capturing/bubbling for this event
eventPhase
Which phase is running now (capture / target / bubble)
Event.bubbles is marked Baseline Widely available on MDN (since July 2015). Logos use the shared browser-image-sprite.png sprite from this project. It is also available in Web Workers.
✓ Baseline · Widely available
Event.bubbles
Read-only boolean: true if the event bubbles up the DOM tree after the target phase.
UniversalWidely available
Google ChromeFull support · Desktop & Mobile
Full support
Mozilla FirefoxFull support · Desktop & Mobile
Full support
Apple SafariFull support · macOS & iOS
Full support
Microsoft EdgeFull support · Chromium
Full support
OperaFull support · Modern versions
Full support
Internet ExplorerSupported (legacy)
Full support
Event.bubblesExcellent
Bottom line: Read event.bubbles to know if ancestors will see the event. Set bubbles only when constructing synthetic events.
Wrap Up
Conclusion
Event.bubbles is the simple yes/no for upward DOM propagation. Read it on any event; set it only when you construct a synthetic one with { bubbles: true }.
Use bubbling + delegation for many similar children
Pass { bubbles: true } when parents must hear custom events
Read event.bubbles when debugging missing parent handlers
Call stopPropagation() only when a component must own the event
Learn cancelable and composed as separate flags
❌ Don’t
Try to assign event.bubbles = true after creation
Assume every event type bubbles
Confuse preventDefault with stopping propagation
Forget that default new Event() uses bubbles: false
Overuse stopPropagation—it breaks outer listeners
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about bubbles
Read-only flag for upward DOM travel.
5
Core concepts
🔁01
boolean
read-only
API
📈02
true
goes to parents
Meaning
📝03
Set once
constructor options
Create
🛑04
stopPropagation
can still block
Control
🎯05
Baseline
since Jul 2015
Status
❓ Frequently Asked Questions
It is a read-only boolean on an Event. It is true if that event bubbles up through the DOM tree after the target phase, and false if it does not.
No. MDN marks Event.bubbles as Baseline Widely available (since July 2015). It is not Deprecated, Experimental, or Non-standard. It is also available in Web Workers.
No. bubbles is read-only. Set it when you create a synthetic event with new Event(type, { bubbles: true }) or a subclass constructor. Built-in events get their bubbling behavior from the browser.
No. Many do (for example click, input), but some do not (for example focus and blur in the classic model, and Element scroll). Always check event.bubbles or the event docs for that type.
Call event.stopPropagation() to stop further capturing/bubbling. Call event.stopImmediatePropagation() to also skip remaining listeners on the same target. preventDefault() does not stop propagation by itself.
Use new Event("my-event", { bubbles: true }) (and cancelable if needed), then target.dispatchEvent(event). Parent listeners will receive it during the bubble phase if they listen for that type.
Did you know?
Event delegation (one listener on a parent for many children) only works for events that bubble—or for listeners registered in the capture phase. Checking event.bubbles is a quick sanity check when a parent never seems to hear a child.