From 633ca9c1610c49dbb780e565f4f1202e1fe20fae Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Sat, 28 Jan 2012 14:58:00 -0500 Subject: [PATCH] Fix #11076. If .clone() won't delegate, we must remediate. Since `jQuery.event.add` can accept a handleObj there's no need to reiterate them as args, but we *do* need to set the `selector` variable correctly. --- src/event.js | 1 + src/manipulation.js | 2 +- test/unit/event.js | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/event.js b/src/event.js index ccdd49b21..6bb4fa816 100644 --- a/src/event.js +++ b/src/event.js @@ -50,6 +50,7 @@ jQuery.event = { if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; + selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later diff --git a/src/manipulation.js b/src/manipulation.js index 1b535074f..e3a7f6b12 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -394,7 +394,7 @@ function cloneCopyEvent( src, dest ) { for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data ); + jQuery.event.add( dest, type, events[ type ][ i ] ); } } } diff --git a/test/unit/event.js b/test/unit/event.js index 4c1901664..dd4bbd55d 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -2657,6 +2657,29 @@ test(".on( event-map, null-selector, data ) #11130", function() { $p.on( map, null, data ).trigger("foo"); }); +test("clone() delegated events (#11076)", function() { + expect(3); + + var counter = { center: 0, fold: 0, centerfold: 0 }, + clicked = function( event ) { + counter[ jQuery(this).text().replace(/\s+/, "") ]++; + }, + table = + jQuery( "
centerfold
" ) + .on( "click", "tr", clicked ) + .on( "click", "td:first-child", clicked ) + .on( "click", "td:last-child", clicked ), + clone = table.clone( true ); + + clone.find("td").click(); + equal( counter.center, 1, "first child" ); + equal( counter.fold, 1, "last child" ); + equal( counter.centerfold, 2, "all children" ); + + table.remove(); + clone.remove(); +}); + test("delegated events quickIs", function() { expect(14); var markup = jQuery( -- 2.39.5