diff options
author | Jason Moon <jmoon@socialcast.com> | 2012-05-21 18:01:59 -0500 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2012-05-22 21:29:13 -0400 |
commit | 4757881759931bfddf32c26de6831f888b8cd20a (patch) | |
tree | ccbe8a6b755f0f4d5e9b8fcd0661a0f230e1c270 | |
parent | b5a84a48f4317a188aa78051d4f0cf12db9d7873 (diff) | |
download | jquery-4757881759931bfddf32c26de6831f888b8cd20a.tar.gz jquery-4757881759931bfddf32c26de6831f888b8cd20a.zip |
Fix #11796. Preserve oldIE change delegation on clone. Closes gh-789.
-rw-r--r-- | src/event.js | 4 | ||||
-rw-r--r-- | src/manipulation.js | 4 | ||||
-rw-r--r-- | test/unit/event.js | 32 |
3 files changed, 34 insertions, 6 deletions
diff --git a/src/event.js b/src/event.js index 458eafbc2..b4a76c710 100644 --- a/src/event.js +++ b/src/event.js @@ -835,13 +835,13 @@ if ( !jQuery.support.changeBubbles ) { jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; - if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event, true ); } }); - elem._change_attached = true; + jQuery._data( elem, "_change_attached", true ); } }); }, diff --git a/src/manipulation.js b/src/manipulation.js index ee5a84c51..2c1f0d2b3 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -464,10 +464,6 @@ function cloneFixAttributes( src, dest ) { // Event data gets referenced instead of copied if the expando // gets copied too dest.removeAttribute( jQuery.expando ); - - // Clear flags for bubbling special change/submit events, they must - // be reattached when the newly cloned events are first activated - dest.removeAttribute( "_change_attached" ); } jQuery.buildFragment = function( args, context, scripts ) { diff --git a/test/unit/event.js b/test/unit/event.js index 78d14b675..db7065fd1 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -1098,6 +1098,38 @@ test( "submit event bubbles on copied forms (#11649)", function(){ $testForm.off( "submit", noSubmit ); }); +test( "change event bubbles on copied forms (#11796)", function(){ + expect( 3 ); + + var $formByClone, $formByHTML, + $form = jQuery("#form"), + $fixture = jQuery("#qunit-fixture"), + $wrapperDiv = jQuery("<div/>").appendTo( $fixture ); + + function delegatedChange() { + ok( true, "Make sure change event bubbles up." ); + return false; + } + + // Attach a delegated change handler to the form + $fixture.on( "change", "form", delegatedChange ); + + // Trigger change event to introduce the _change_attached property + $form.find("select[name=select1]").val("1").change(); + + // Copy the form via .clone() and .html() + $formByClone = $form.clone( true, true ).removeAttr("id"); + $formByHTML = jQuery( $fixture.html() ).filter("#form").removeAttr("id"); + $wrapperDiv.append( $formByClone, $formByHTML ); + + // Check change bubbling on the copied forms + $wrapperDiv.find("form select[name=select1]").val("2").change(); + + // Clean up + $wrapperDiv.remove(); + $fixture.off( "change", "form", delegatedChange ); +}); + test("trigger(eventObject, [data], [fn])", function() { expect(28); |