]> source.dussan.org Git - jquery.git/commitdiff
Fix #11076. If .clone() won't delegate, we must remediate.
authorDave Methvin <dave.methvin@gmail.com>
Sat, 28 Jan 2012 19:58:00 +0000 (14:58 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Sat, 28 Jan 2012 21:30:35 +0000 (16:30 -0500)
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
src/manipulation.js
test/unit/event.js

index ccdd49b2169ce47aac38234cd0da4b3da6ba65d6..6bb4fa81669211941cc5996d33f7a51f0568a64a 100644 (file)
@@ -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
index 1b535074f6eecf47a89cedf7518032befb7d2e41..e3a7f6b126066b072d6103ac119b920786557a44 100644 (file)
@@ -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 ] );
                        }
                }
        }
index 4c19016644cada9138f82e39f68193ceaf839503..dd4bbd55d935101ba66c837f74f24cd92b5201bb 100644 (file)
@@ -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(