diff options
author | Richard Gibson <richard.gibson@gmail.com> | 2016-05-06 22:12:53 -0400 |
---|---|---|
committer | Richard Gibson <richard.gibson@gmail.com> | 2016-05-06 22:12:53 -0400 |
commit | e8825a529b97a27b8b2e40eaaa7773189642c772 (patch) | |
tree | cd1e74d0024fb208a5d2fe371cf6074407320179 | |
parent | 7fd36ea145a11d5896de6d064b546b1c57a83f34 (diff) | |
download | jquery-e8825a529b97a27b8b2e40eaaa7773189642c772.tar.gz jquery-e8825a529b97a27b8b2e40eaaa7773189642c772.zip |
Event: Cover invalid delegation selector edge cases
Ref 7fd36ea145a11d5896de6d064b546b1c57a83f34
-rw-r--r-- | src/event.js | 8 | ||||
-rw-r--r-- | test/unit/event.js | 18 |
2 files changed, 15 insertions, 11 deletions
diff --git a/src/event.js b/src/event.js index 3f1c5f31a..1c29a6b09 100644 --- a/src/event.js +++ b/src/event.js @@ -1,13 +1,14 @@ define( [ "./core", "./var/document", + "./var/documentElement", "./var/rnotwhite", "./var/slice", "./data/var/dataPriv", "./core/init", "./selector" -], function( jQuery, document, rnotwhite, slice, dataPriv ) { +], function( jQuery, document, documentElement, rnotwhite, slice, dataPriv ) { "use strict"; @@ -120,9 +121,10 @@ jQuery.event = { selector = handleObjIn.selector; } - // If the selector is invalid, throw any exceptions at attach time + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) if ( selector ) { - jQuery.find( selector, elem ); + jQuery.find.matchesSelector( documentElement, selector ); } // Make sure that the handler has a unique ID, used to find/remove it later diff --git a/test/unit/event.js b/test/unit/event.js index 6b4af04b9..5d4108c90 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -1289,17 +1289,19 @@ QUnit.test( "Delegated events in SVG (#10791; #13180)", function( assert ) { jQuery( "#qunit-fixture" ).off( "click" ); } ); -QUnit.test( "Delegated events with malformed selectors (#3071)", function( assert ) { - assert.expect( 2 ); +QUnit.test( "Delegated events with malformed selectors (gh-3071)", function( assert ) { + assert.expect( 3 ); - assert.throws( function () { - jQuery( "#qunit-fixture" ).on( "click", "div:not", function () { } ); - }, null, "malformed selector throws on attach" ); + assert.throws( function() { + jQuery( "#foo" ).on( "click", ":not", function() {} ); + }, "malformed selector throws on attach" ); - jQuery( "#qunit-fixture" ).click(); - assert.ok( true, "malformed selector does not throw on event" ); + assert.throws( function() { + jQuery( "#foo" ).on( "click", "nonexistent:not", function() {} ); + }, "short-circuitable malformed selector throws on attach" ); - jQuery( "#qunit-fixture" ).off( "click" ); + jQuery( "#foo > :first-child" ).click(); + assert.ok( true, "malformed selector does not throw on event" ); } ); QUnit.test( "Delegated events in forms (#10844; #11145; #8165; #11382, #11764)", function( assert ) { |