Showing with 31 additions and 8 deletions.
  1. +3 −3 src/event.js
  2. +28 −5 test/unit/event.js
@@ -384,12 +384,12 @@ jQuery.event = {

// Pregenerate a single jQuery object for reuse with .is()
jqcur = jQuery(this);
jqcur.context = this.ownerDocument || this;
jqcur.context = this;

for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {

// Don't process events on disabled elements (#6911, #8165)
if ( cur.disabled !== true ) {
// Don't process clicks (ONLY) on disabled elements (#6911, #8165, #xxxx)
if ( cur.disabled !== true || event.type !== "click" ) {
selMatch = {};
matches = [];
jqcur[0] = cur;
@@ -1298,8 +1298,8 @@ test("Delegated events in SVG (#10791)", function() {
svg.remove();
});

test("Delegated events in forms (#10844; #11145; #8165)", function() {
expect(3);
test("Delegated events in forms (#10844; #11145; #8165; #xxxxx)", function() {
expect(5);

// Alias names like "id" cause havoc
var form = jQuery(
@@ -1334,11 +1334,20 @@ test("Delegated events in forms (#10844; #11145; #8165)", function() {
form
.append( '<button id="nestyDisabledBtn"><span>Zing</span></button>' )
.on( "click", "#nestyDisabledBtn", function() {
ok( true, "enabled/disabled button with nesty elements" );
ok( true, "click on enabled/disabled button with nesty elements" );
})
.on( "mouseover", "#nestyDisabledBtn", function() {
ok( true, "mouse on enabled/disabled button with nesty elements" );
})
.find( "span" ).trigger( "click" ).end() // yep
.find( "span" )
.trigger( "click" ) // yep
.trigger( "mouseover" ) // yep
.end()
.find( "#nestyDisabledBtn" ).prop( "disabled", true ).end()
.find( "span" ).trigger( "click" ).end() // nope
.find( "span" )
.trigger( "click" ) // nope
.trigger( "mouseover" ) // yep
.end()
.off( "click" );

form.remove();
@@ -2333,6 +2342,20 @@ test("jQuery.off using dispatched jQuery.Event", function() {
.remove();
});

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

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

test("stopPropagation() stops directly-bound events on delegated target", function() {
expect(1);