From fc2ba2e1361126c39f955437ee025cfca3bffa65 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Wed, 16 Jan 2013 00:14:57 -0500 Subject: [PATCH] Fix #13208: only check elements for delegation matches --- src/event.js | 3 ++- test/unit/event.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/event.js b/src/event.js index 772d65ef4..6554769ba 100644 --- a/src/event.js +++ b/src/event.js @@ -410,8 +410,9 @@ jQuery.event = { for ( ; cur != this; cur = cur.parentNode || this ) { + // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.disabled !== true || event.type !== "click" ) { + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; diff --git a/test/unit/event.js b/test/unit/event.js index 6984b4945..bde9f7f43 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -1811,6 +1811,17 @@ test( "delegated event with selector matching Object.prototype property (#13203) equal( matched, 0, "Nothing matched 'toString'" ); }); +test( "delegated event with intermediate DOM manipulation (#13208)", function() { + expect(1); + + jQuery("#foo").on( "click", "#sap", function() {}); + jQuery("#sap").on( "click", "#anchor2", function() { + jQuery( this.parentNode ).remove(); + ok( true, "Element removed" ); + }); + jQuery("#anchor2").trigger("click"); +}); + test("stopPropagation() stops directly-bound events on delegated target", function() { expect(1);