aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Methvin <dave.methvin@gmail.com>2012-01-28 14:58:00 -0500
committerDave Methvin <dave.methvin@gmail.com>2012-01-28 16:30:35 -0500
commit633ca9c1610c49dbb780e565f4f1202e1fe20fae (patch)
tree379b62b9c5677e67fa57714bb4eb56b4464be761
parent499658970b2c9add7a7d175dffc8e263c3b7b50d (diff)
downloadjquery-633ca9c1610c49dbb780e565f4f1202e1fe20fae.tar.gz
jquery-633ca9c1610c49dbb780e565f4f1202e1fe20fae.zip
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.
-rw-r--r--src/event.js1
-rw-r--r--src/manipulation.js2
-rw-r--r--test/unit/event.js23
3 files changed, 25 insertions, 1 deletions
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( "<table><tr><td>center</td><td>fold</td></tr></table>" )
+ .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(