Skip to content

Commit

Permalink
Support event delegation with relative selectors. Fixes #10762. Closes
Browse files Browse the repository at this point in the history
  • Loading branch information
gibson042 authored and timmywil committed Jul 23, 2012
1 parent a08a18b commit e761e0c
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
8 changes: 4 additions & 4 deletions src/traversing.js
@@ -1,7 +1,7 @@
var runtil = /Until$/, var runtil = /Until$/,
rparentsprev = /^(?:parents|prev(?:Until|All))/, rparentsprev = /^(?:parents|prev(?:Until|All))/,
isSimple = /^.[^:#\[\.,]*$/, isSimple = /^.[^:#\[\.,]*$/,
POS = jQuery.expr.match.globalPOS, rneedsContext = jQuery.expr.match.needsContext,
// methods guaranteed to produce a unique set when starting from a unique set // methods guaranteed to produce a unique set when starting from a unique set
guaranteedUnique = { guaranteedUnique = {
children: true, children: true,
Expand Down Expand Up @@ -72,9 +72,9 @@ jQuery.fn.extend({
is: function( selector ) { is: function( selector ) {
return !!selector && ( return !!selector && (
typeof selector === "string" ? typeof selector === "string" ?
// If this is a positional selector, check membership in the returned set // If this is a positional/relative selector, check membership in the returned set
// so $("p:first").is("p:last") won't return true for a doc with two "p". // so $("p:first").is("p:last") won't return true for a doc with two "p".
POS.test( selector ) ? rneedsContext.test( selector ) ?
jQuery( selector, this.context ).index( this[0] ) >= 0 : jQuery( selector, this.context ).index( this[0] ) >= 0 :
jQuery.filter( selector, this ).length > 0 : jQuery.filter( selector, this ).length > 0 :
this.filter( selector ).length > 0 ); this.filter( selector ).length > 0 );
Expand All @@ -85,7 +85,7 @@ jQuery.fn.extend({
i = 0, i = 0,
l = this.length, l = this.length,
ret = [], ret = [],
pos = POS.test( selectors ) || typeof selectors !== "string" ? pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
jQuery( selectors, context || this.context ) : jQuery( selectors, context || this.context ) :
0; 0;


Expand Down
17 changes: 10 additions & 7 deletions test/unit/event.js
Expand Up @@ -2342,17 +2342,20 @@ test("jQuery.off using dispatched jQuery.Event", function() {
.remove(); .remove();
}); });


test( "delegated event with delegateTarget-relative selector (#)", function() { test( "delegated event with delegateTarget-relative selector", function() {
expect(1); expect(2);
var markup = jQuery( '<ul><li><ul id="u1"><li id="f1"></li></ul></li>' ).appendTo("body"); var markup = jQuery( '<ul><li><a id="a0"></a><ul id="ul0"><li><a id="a0_0"></a></li><li><a id="a0_1"></a></li></ul></li></ul>' ).appendTo("body");


markup markup
.find("#u1") .on( "click", ">li>a", function() {
.on( "click", "li:first", function() { ok( this.id === "a0", "child li was clicked" );
ok( this.id === "f1" , "first li under #u1 was clicked" ); })
.find("#ul0")
.on( "click", "li:first>a", function() {
ok( this.id === "a0_0" , "first li under #u10 was clicked" );
}) })
.find("#f1").click().end()
.end() .end()
.find("a").click().end()
.remove(); .remove();
}); });


Expand Down

0 comments on commit e761e0c

Please sign in to comment.