diff options
author | dmethvin <dave.methvin@gmail.com> | 2010-10-23 14:36:24 -0400 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2010-10-25 13:05:31 -0700 |
commit | 974b5aeab7a3788ff5fb9db87b9567784e0249fc (patch) | |
tree | bb2f306f606baef485ac31cf76f3546d0e181fa3 | |
parent | ee845c49758eeb5236d9e4520b7921e12d5f29b9 (diff) | |
download | jquery-974b5aeab7a3788ff5fb9db87b9567784e0249fc.tar.gz jquery-974b5aeab7a3788ff5fb9db87b9567784e0249fc.zip |
Honor stopImmediatePropagation for live/delegate event handlers. Fixes #7217.
-rw-r--r-- | src/event.js | 3 | ||||
-rw-r--r-- | test/unit/event.js | 30 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/event.js b/src/event.js index d491ae8a1..959e89c5e 100644 --- a/src/event.js +++ b/src/event.js @@ -1132,6 +1132,9 @@ function liveHandler( event ) { if ( ret === false ) { stop = false; } + if ( event.isImmediatePropagationStopped() ) { + break; + } } } diff --git a/test/unit/event.js b/test/unit/event.js index 5efa0ec51..54431dd33 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -265,6 +265,36 @@ test("live/die(Object), delegate/undelegate(String, Object)", function() { equals( mouseoverCounter, 4, "die" ); }); +test("live/delegate immediate propagation", function() { + expect(2); + + var $p = jQuery("#firstp"), $a = $p.find("a:first"), lastClick; + + lastClick = ""; + $a.live( "click", function(e) { + lastClick = "click1"; + e.stopImmediatePropagation(); + }); + $a.live( "click", function(e) { + lastClick = "click2"; + }); + $a.trigger( "click" ); + equals( lastClick, "click1", "live stopImmediatePropagation" ); + $a.die( "click" ); + + lastClick = ""; + $p.delegate( "a", "click", function(e) { + lastClick = "click1"; + e.stopImmediatePropagation(); + }); + $p.delegate( "a", "click", function(e) { + lastClick = "click2"; + }); + $a.trigger( "click" ); + equals( lastClick, "click1", "delegate stopImmediatePropagation" ); + $p.undelegate( "click" ); +}); + test("bind(), iframes", function() { // events don't work with iframes, see #939 - this test fails in IE because of contentDocument var doc = jQuery("#loadediframe").contents(); |