The cancelable property is a read-only boolean on every Event: true if preventDefault() can cancel the event’s default action, false if it cannot. Learn how to read it, set it on synthetic events, check before calling preventDefault, and relate it to defaultPrevented—with five examples and try-it labs.
01
Kind
Instance property
02
Type
boolean (read-only)
03
Means
Can preventDefault?
04
Set via
Constructor options
05
Workers
Yes
06
Status
Baseline widely
Fundamentals
Introduction
Many browser events have a default action: follow a link, submit a form, scroll on wheel, leave the page on beforeunload. event.cancelable tells you whether your listener is allowed to block that default with preventDefault().
If cancelable is false, calling preventDefault() does nothing useful—the default still happens. Most cancelable browser events come from user interaction. Synthetic events choose cancelability when created.
💡
Beginner tip
Canceling is not the same as stopping propagation. preventDefault() blocks the browser default; stopPropagation() stops travel through the DOM. Check cancelable before preventDefault() in shared handlers.
Concept
Understanding Event.cancelable
An instance property that answers: “Can preventDefault() cancel this event’s default action?”
Value — true if cancelable; false otherwise.
Read-only — set only at construction for synthetic events.
Cancel how — call event.preventDefault() when cancelable is true.
After cancel — event.defaultPrevented becomes true.
Baseline Widely available on MDN (since July 2015); also in Web Workers.
Foundation
📝 Syntax
JavaScript
event.cancelable
Value
A boolean: true if the event can be canceled.
Set on synthetic events
JavaScript
const soft = new Event("save"); // default cancelable: false
const hard = new Event("save", { cancelable: true });
console.log(soft.cancelable); // false
console.log(hard.cancelable); // true
dispatchEvent returns false when the default was prevented on a cancelable event.
Example 4 — Check Before preventDefault (MDN)
MDN wheel pattern: only call preventDefault when the event is cancelable.
JavaScript
function preventScrollWheel(event) {
if (typeof event.cancelable !== "boolean" || event.cancelable) {
// The event can be canceled, so we do so.
event.preventDefault();
} else {
// Not safe to call preventDefault()
console.warn("The following event couldn't be canceled:");
console.dir(event);
}
}
document.addEventListener("wheel", preventScrollWheel, { passive: false });
Wheel over the pad is blocked when cancelable is true
(Some later wheel events in a sequence may not be cancelable)
How It Works
MDN notes some browsers may only cancel the first wheel in a sequence. Always check cancelable in shared handlers. Use { passive: false } when you need to cancel wheel.
Example 5 — Cancel a Link Click
Stop navigation when the click is cancelable (it usually is).
JavaScript
const link = document.getElementById("link");
const out = document.getElementById("out");
link.addEventListener("click", (event) => {
if (event.cancelable) {
event.preventDefault();
out.textContent = "Navigation canceled (cancelable=" + event.cancelable + ")";
}
});
Event.cancelable 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.cancelable
Read-only boolean: true if preventDefault() can cancel the eventโs default action.
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.cancelableExcellent
Bottom line: Read event.cancelable before preventDefault() in shared handlers. Set cancelable only when constructing synthetic events.
Wrap Up
Conclusion
Event.cancelable is the yes/no for whether preventDefault() can block the default action. Read it on any event; set it only when you construct a synthetic one with { cancelable: true }.
Check event.cancelable before preventDefault() in shared handlers
Pass { cancelable: true } when callers may cancel custom events
Use { passive: false } when you must cancel wheel / touch scroll
Read defaultPrevented to confirm a cancel stuck
Learn bubbles as a separate propagation flag
❌ Don’t
Assign event.cancelable = true after creation
Assume every event type is cancelable
Confuse preventDefault with stopPropagation
Forget that default new Event() uses cancelable: false
Expect passive listeners to allow canceling
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about cancelable
Read-only flag for whether preventDefault can win.
5
Core concepts
🚫01
Boolean
read-only
API
✅02
true
preventDefault OK
Meaning
📝03
Set once
constructor options
Create
🛡️04
Check first
especially wheel
Safety
🎯05
Baseline
since Jul 2015
Status
❓ Frequently Asked Questions
It is a read-only boolean on an Event. It is true if the event can be canceled with preventDefault(), so the browser does not run its default action. If it is false, preventDefault() cannot stop that default.
No. MDN marks Event.cancelable as Baseline Widely available (since July 2015). It is not Deprecated, Experimental, or Non-standard. It is also available in Web Workers.
Call event.preventDefault() in a listener. That only works when event.cancelable is true. After a successful cancel, event.defaultPrevented becomes true.
No. cancelable is read-only. For synthetic events, set it with new Event(type, { cancelable: true }). Built-in events get their value from the browser.
MDN notes that some events (for example later wheel events in a sequence) may not be cancelable. Handlers that cover many event types should check cancelable before calling preventDefault().
No. bubbles controls whether the event travels up the DOM. cancelable controls whether preventDefault() can block the default action. They are independent flags.
Did you know?
MDN calls out wheel: some browsers may only allow canceling the first wheel event in a sequence. Later ones can report cancelable === false—another reason to check before preventDefault().