aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2009-02-09 23:29:57 +0000
committerJohn Resig <jeresig@gmail.com>2009-02-09 23:29:57 +0000
commit9aa0c69c43bad9fce5ef7732692308afb2a38ec6 (patch)
tree8f4f5be81a2ba17d828e2fa4e1c1256a4ac10d14 /test
parent0ae78024c23dd3ef4bcea883338d975dcf843597 (diff)
downloadjquery-9aa0c69c43bad9fce5ef7732692308afb2a38ec6.tar.gz
jquery-9aa0c69c43bad9fce5ef7732692308afb2a38ec6.zip
Fixed bubbling of live events (if an inner element handles an event first - and stops progatation - then the parent event doesn't encounter the event). Thanks to Irae for the patch. Fixes bug #3980.
Diffstat (limited to 'test')
-rw-r--r--test/index.html5
-rw-r--r--test/unit/event.js25
-rw-r--r--test/unit/selector.js6
3 files changed, 32 insertions, 4 deletions
diff --git a/test/index.html b/test/index.html
index 89244d7da..2c3545f0f 100644
--- a/test/index.html
+++ b/test/index.html
@@ -213,6 +213,11 @@ Z</textarea>
<span>...</span><a id="linkWithNoHrefWithTabIndex" tabindex="1">Eat some funyuns</a><span>...</span>
<span>...</span><a id="linkWithNoHrefWithNegativeTabIndex" tabindex="-1">Eat some funyuns</a><span>...</span>
</div>
+
+ <div id="liveHandlerOrder">
+ <span id="liveSpan1"><a href="#" id="liveLink1"></a></span>
+ <span id="liveSpan2"><a href="#" id="liveLink2"></a></span>
+ </div>
</div>
</dl>
diff --git a/test/unit/event.js b/test/unit/event.js
index 4d2b0aafe..1da9b5906 100644
--- a/test/unit/event.js
+++ b/test/unit/event.js
@@ -474,7 +474,7 @@ test("toggle(Function, Function, ...)", function() {
});
test(".live()/.die()", function() {
- expect(42);
+ expect(46);
var submit = 0, div = 0, livea = 0, liveb = 0;
@@ -611,6 +611,29 @@ test(".live()/.die()", function() {
// Cleanup
jQuery("#nothiddendivchild").die("click");
+
+ // Verify that .live() ocurs and cancel buble in the same order as
+ // we would expect .bind() and .click() without delegation
+ var lived = 0, livee = 0;
+
+ // bind one pair in one order
+ jQuery('span#liveSpan1 a').live('click', function(){ lived++; return false; });
+ jQuery('span#liveSpan1').live('click', function(){ livee++; });
+
+ jQuery('span#liveSpan1 a').click();
+ equals( lived, 1, "Verify that only one first handler occurred." );
+ equals( livee, 0, "Verify that second handler don't." );
+
+ // and one pair in inverse
+ jQuery('#liveHandlerOrder span#liveSpan2').live('click', function(){ livee++; });
+ jQuery('#liveHandlerOrder span#liveSpan2 a').live('click', function(){ lived++; return false; });
+
+ jQuery('span#liveSpan2 a').click();
+ equals( lived, 2, "Verify that only one first handler occurred." );
+ equals( livee, 0, "Verify that second handler don't." );
+
+ // Cleanup
+ jQuery("span#liveSpan1 a, span#liveSpan1, span#liveSpan2 a, span#liveSpan2").die("click");
});
/*
diff --git a/test/unit/selector.js b/test/unit/selector.js
index 924f41d0e..f7c39121c 100644
--- a/test/unit/selector.js
+++ b/test/unit/selector.js
@@ -189,7 +189,7 @@ test("child and adjacent", function() {
reset();
t( "Last Child", "p:last-child", ["sap"] );
- t( "Last Child", "a:last-child", ["simon1","anchor1","mark","yahoo","anchor2","simon"] );
+ t( "Last Child", "a:last-child", ["simon1","anchor1","mark","yahoo","anchor2","simon","liveLink1","liveLink2"] );
t( "Nth-child", "#main form#form > *:nth-child(2)", ["text1"] );
t( "Nth-child", "#main form#form > :nth-child(2)", ["text1"] );
@@ -278,7 +278,7 @@ test("pseudo (:) selectors", function() {
expect(53);
t( "First Child", "p:first-child", ["firstp","sndp"] );
t( "Last Child", "p:last-child", ["sap"] );
- t( "Only Child", "a:only-child", ["simon1","anchor1","yahoo","anchor2"] );
+ t( "Only Child", "a:only-child", ["simon1","anchor1","yahoo","anchor2","liveLink1","liveLink2"] );
t( "Empty", "ul:empty", ["firstUL"] );
t( "Enabled UI Element", "#form input:not([type=hidden]):enabled", ["text1","radio1","radio2","check1","check2","hidden2","name"] );
t( "Disabled UI Element", "#form input:disabled", ["text2"] );
@@ -290,7 +290,7 @@ test("pseudo (:) selectors", function() {
t( "Text Contains", "a:contains('Google Groups (Link)')", ["groups"] );
t( "Text Contains", "a:contains('(Link)')", ["groups"] );
- t( "Element Preceded By", "p ~ div", ["foo","fx-queue","fx-tests", "moretests","tabindex-tests"] );
+ t( "Element Preceded By", "p ~ div", ["foo","fx-queue","fx-tests", "moretests","tabindex-tests", "liveHandlerOrder"] );
t( "Not", "a.blog:not(.link)", ["mark"] );
t( "Not - multiple", "#form option:not(:contains('Nothing'),#option1b,:selected)", ["option1c", "option1d", "option2b", "option2c", "option3d", "option3e"] );
//t( "Not - complex", "#form option:not([id^='opt']:nth-child(-n+3))", [ "option1a", "option1d", "option2d", "option3d", "option3e"] );