jQuery event.isPropagationStopped()

Beginner
⏱️ 9 min read
📚 Updated: Jul 2026
🎯 5 Examples
🚀 5 Try-it labs
Event object · jQuery 1.3+

What You’ll Learn

event.isPropagationStopped() returns whether event.stopPropagation() was called on this event. This tutorial covers the official button demo, stopping bubble to parent handlers, comparing with stopImmediatePropagation() and isImmediatePropagationStopped(), and coordinating multiple listeners.

01

Method

isPropagationStopped()

02

Returns

Boolean

03

Official

not called → called

04

stopPropagation

Sets flag

05

Bubbling

Parent handlers

06

Since 1.3

No arguments

Introduction

When a click or other event bubbles from a child element up through parent elements, each ancestor with a bound handler may run. Sometimes a handler on the child must stop that bubble — so a parent’s delegated handler never fires.

Calling event.stopPropagation() halts bubbling. To check whether it already happened — in the same handler or a helper — call event.isPropagationStopped(). jQuery has exposed this check since version 1.3 on its normalized event object (aligned with the W3C DOM Level 3 specification).

Understanding event.isPropagationStopped()

This method answers one question: was event bubbling stopped on this event?

  • Before stopPropagationevent.isPropagationStopped() returns false.
  • After stopPropagation — returns true for the rest of that dispatch.
  • Read-only — takes no arguments; does not change state.
  • Parent handlers — once true, ancestors will not receive this dispatch (unless they use capture phase).
💡
Beginner Tip

stopPropagation() stops bubbling up the DOM — parent handlers are skipped. Other handlers on the same element can still run. Use isPropagationStopped() to check whether bubbling was already halted.

📝 Syntax

Official jQuery API form (since 1.3):

jQuery
event.isPropagationStopped()



// typical pattern:
$( "button" ).on( "click", function ( event ) {
  if ( !event.isPropagationStopped() ) {
    // propagation not stopped yet
  }
  event.stopPropagation();
  if ( event.isPropagationStopped() ) {
    // now true
  }
});

Parameters

  • None — this method does not accept any arguments.

Return value

  • Booleantrue if event.stopPropagation() was called on this event object; otherwise false.

Official jQuery API example

jQuery
function propStopped( event ) {
  var msg = event.isPropagationStopped() ? "called" : "not called";
  $( "#stop-log" ).append( "<div>" + msg + "</div>" );
}



$( "button" ).on( "click", function ( event ) {
  propStopped( event );
  event.stopPropagation();
  propStopped( event );
});

⚡ Quick Reference

ActionAPIAfter call
Stop bubblingevent.stopPropagation()isPropagationStopped() === true
Check if stoppedevent.isPropagationStopped()Boolean
Stop handler queuestopImmediatePropagation()Use isImmediatePropagationStopped()
Cancel default actionevent.preventDefault()Use isDefaultPrevented()
jQuery return falsereturn falseprevent + stopPropagation (not immediate)

📋 stopPropagation() vs isPropagationStopped() vs immediate stop

Two stop methods at different levels — two read-only checks report which flags were set.

stopPropagation
event.stopPropagation()

Stop bubbling; same-element handlers may continue

isPropagationStopped
event.isPropagationStopped()

Read bubbling-stop flag

stopImmediatePropagation
event.stopImmediatePropagation()

Skip remaining handlers + stop bubbling

isImmediatePropagationStopped
event.isImmediatePropagationStopped()

Read immediate-stop flag

Examples Gallery

Example 1 follows the official jQuery demo. Examples 2–5 cover bubbling to parents, same-element handlers, guard helpers, and return false.

📚 Official jQuery Demo

Log “not called”, call stopPropagation(), log “called”.

Example 1 — Official Demo: not called then called

Official jQuery demo — helper logs whether stopPropagation() was called before and after invoking it in one click handler (same pattern as the jQuery API docs).

jQuery
function propStopped( event ) {
  var msg = event.isPropagationStopped() ? "called" : "not called";
  $( "#stop-log" ).append( "<div>" + msg + "</div>" );
}



$( "button" ).on( "click", function ( event ) {
  propStopped( event );
  event.stopPropagation();
  propStopped( event );
});
Try It Yourself

How It Works

stopPropagation() sets an internal flag on the event object. isPropagationStopped() reads that flag — the official demo proves the transition within one handler.

Example 2 — Stop bubbling: parent handler never runs

Click a button inside a nested box — the inner handler calls stopPropagation(), so the outer box click handler does not run.

jQuery
$( ".outer" ).on( "click", function () {
  $( "#log" ).append( "<div>Outer handler ran</div>" );
});

$( ".inner button" ).on( "click", function ( event ) {
  event.stopPropagation();
  $( "#log" ).append( "<div>Inner stopped bubble — flag: " +
    event.isPropagationStopped() + "</div>" );
});
Try It Yourself

How It Works

stopPropagation() prevents the event from reaching parent elements. isPropagationStopped() confirms the bubble was halted on the child handler.

📈 Practical Patterns

Same-element handlers, guard helpers, and return false.

Example 3 — Same element: second handler still runs

stopPropagation() does not skip other handlers on the same button — the second handler runs and sees the flag as true.

jQuery
$( "#btn" ).on( "click", function ( event ) {
  event.stopPropagation();
  $( "#log" ).append( "Handler 1 — propagation stopped? " +
    event.isPropagationStopped() + "\n" );
});

$( "#btn" ).on( "click", function ( event ) {
  $( "#log" ).append( "Handler 2 — still sees flag: " +
    event.isPropagationStopped() );
});
Try It Yourself

How It Works

Contrast with stopImmediatePropagation(), which would skip handler 2. isPropagationStopped() reports bubbling state, not handler-queue state.

Example 4 — Guard helper: skip after stopPropagation

Shared helper returns early once stopPropagation() was called — call it before and after the stop in one handler.

jQuery
function logBubbleState( event, label ) {
  if ( event.isPropagationStopped() ) {
    return label + ": propagation already stopped";
  }
  return label + ": propagation still active";
}

$( "#btn" ).on( "click", function ( event ) {
  $( "#log" ).append( "<div>" + logBubbleState( event, "before" ) + "</div>" );
  event.stopPropagation();
  $( "#log" ).append( "<div>" + logBubbleState( event, "after" ) + "</div>" );
});
Try It Yourself

How It Works

Call the helper before and after stopPropagation() in the same handler — the second call sees the flag and returns the stopped message.

Example 5 — return false sets propagation stopped

jQuery return false calls stopPropagation() — a later handler on the same element sees isPropagationStopped() === true.

jQuery
$( "#btn" ).on( "click", function () {
  return false;
});

$( "#btn" ).on( "click", function ( event ) {
  $( "#log" ).text(
    "Second handler — propagation stopped? " + event.isPropagationStopped()
  );
});
Try It Yourself

How It Works

return false is jQuery sugar for preventDefault() plus stopPropagation(). Prefer explicit calls in new code; know that isPropagationStopped() reflects the propagation part.

🚀 Common Use Cases

  • Debug bubbling — log isPropagationStopped() after child handlers run.
  • Nested widgets — inner control stops bubble so outer panel click handler does not fire.
  • Delegated parents — child stopPropagation() prevents parent .on() delegation.
  • Modal overlays — click inside modal stops propagation to document handlers.
  • Plugin stacks — check the flag before running parent-level analytics.
  • Testing — assert the flag after simulating clicks in Try-it labs.

🧠 How isPropagationStopped() Works

1

Event fires

User clicks — event may bubble from target to ancestors; propagation flag starts false.

Start
2

Early handlers

isPropagationStopped() returns false until something calls stopPropagation().

Check
3

stopPropagation()

Handler sets the flag — parent elements will not receive this dispatch.

Stop
4

Flag stays true

Later handlers on the same element or helpers read isPropagationStopped() === true.

📝 Notes

  • Available since jQuery 1.3 — returns a Boolean.
  • Takes no arguments — read-only query method.
  • Reports whether stopPropagation() (or stopImmediatePropagation()) halted bubbling on this event object.
  • Does not report handler-queue state alone — use isImmediatePropagationStopped() for same-element skips.
  • stopImmediatePropagation() also sets isPropagationStopped() to true.
  • Introduced in DOM Level 3; jQuery normalizes it across supported browsers.

Browser Support

event.isPropagationStopped() is part of jQuery’s normalized event object since jQuery 1.3+. It mirrors the native propagation-stopped flag across browsers jQuery supports, as described in the W3C DOM Level 3 Events specification.

jQuery 1.3+ · all browsers

jQuery event.isPropagationStopped()

Check whether event bubbling was stopped.

100% Universal
Google Chrome All versions · Desktop & Mobile
Full support
Mozilla Firefox All versions · Desktop & Mobile
Full support
Apple Safari All versions · macOS & iOS
Full support
Microsoft Edge All versions · Chromium & Legacy
Full support
Internet Explorer IE 6+ · Legacy environments
Full support
Opera All modern versions
Full support
isPropagationStopped() Boolean

Bottom line: Call stopPropagation() to halt bubbling — call isPropagationStopped() to verify.

Conclusion

event.isPropagationStopped() tells you whether event bubbling was halted on the current dispatch. The official demo shows it flip from “not called” to “called” immediately after stopPropagation().

Use it when child handlers, helpers, or stacked plugins must respect an earlier bubble stop — especially with nested UI, delegation, and return false.

💡 Best Practices

✅ Do

  • Call event.stopPropagation() explicitly when you must stop bubbling to parents
  • Check isPropagationStopped() in shared helpers
  • Use stopPropagation on inner elements to isolate clicks from parent handlers
  • Log the flag while debugging multi-handler bugs
  • Pair with stopPropagation() — one stops bubble, one verifies

❌ Don’t

  • Call isPropagationStopped() expecting to reset the flag
  • Confuse with isImmediatePropagationStopped() or isDefaultPrevented()
  • Use stopPropagation when you only need to block parents — not stopImmediatePropagation
  • Use stopImmediatePropagation when you must skip same-element handlers too
  • Bind parent handlers knowing child stopPropagation() may block them

Key Takeaways

Knowledge Unlocked

Five things to remember about isPropagationStopped()

Read whether event bubbling was halted.

5
Core concepts
stop 02

stopPropagation

Sets true

Pair
demo 03

Official

not called → called

Demo
queue 04

Bubbling

Parent handlers

Use
vs 05

stopImmediate

Also sets flag

Compare

❓ Frequently Asked Questions

event.isPropagationStopped() returns true if event.stopPropagation() was called on this event object at any point during handler execution, and false otherwise. It is a read-only check with no arguments. Available since jQuery 1.3.
Use it when a handler or helper needs to know whether bubbling was halted — for example, skipping parent-level analytics when a child handler already called stopPropagation(), or logging state inside multi-step handler logic.
stopPropagation() prevents the event from reaching parent elements but other handlers on the same element can still run. stopPropagation() also skips remaining handlers on the same element. Both set isPropagationStopped() to true; only stopPropagation sets isPropagationStopped().
No. isPropagationStopped() reports whether stopPropagation() (or stopPropagation()) halted bubbling. isPropagationStopped() reports only whether stopPropagation() was called to skip remaining same-element handlers.
No. isPropagationStopped() only reports state — it does not reset the flag. Once stopPropagation() runs, parent elements will not receive this dispatch.
Yes. In jQuery handlers, return false calls both preventDefault() and stopPropagation(). After return false is processed, isPropagationStopped() returns true, but isPropagationStopped() remains false unless you also call stopPropagation().
Did you know?

jQuery added isPropagationStopped() alongside isImmediatePropagationStopped() and isDefaultPrevented() in version 1.3 — giving handlers three read-only checks for the three main event flags. This method is described in the W3C DOM Level 3 Events specification.

Next: event.metaKey

Detect Command / Windows key state on click and keyboard events.

event.metaKey tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

6 people found this page helpful