diff options
author | Jason Moon <jmoon@socialcast.com> | 2012-05-18 16:30:28 -0400 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2012-05-18 16:34:30 -0400 |
commit | e93f2a89e277d3fffbc15b4ef82ebc3ac6a840f5 (patch) | |
tree | 4e723f589cb175b44adc07d316e6c7dd21a7f682 | |
parent | 6bf3f20d4e0f69ab14702152880a0574623490e2 (diff) | |
download | jquery-e93f2a89e277d3fffbc15b4ef82ebc3ac6a840f5.tar.gz jquery-e93f2a89e277d3fffbc15b4ef82ebc3ac6a840f5.zip |
Fix #11649. Preserve oldIE submit flag when cloning, closes gh-772.
-rw-r--r-- | src/event.js | 4 | ||||
-rw-r--r-- | src/manipulation.js | 1 | ||||
-rw-r--r-- | test/unit/event.js | 35 |
3 files changed, 37 insertions, 3 deletions
diff --git a/src/event.js b/src/event.js index 6351d0b53..458eafbc2 100644 --- a/src/event.js +++ b/src/event.js @@ -772,11 +772,11 @@ if ( !jQuery.support.submitBubbles ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !form._submit_attached ) { + if ( form && !jQuery._data( form, "_submit_attached" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submit_bubble = true; }); - form._submit_attached = true; + jQuery._data( form, "_submit_attached", true ); } }); // return undefined since we don't need an event listener diff --git a/src/manipulation.js b/src/manipulation.js index 8b338a5b4..ee5a84c51 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -467,7 +467,6 @@ function cloneFixAttributes( src, dest ) { // Clear flags for bubbling special change/submit events, they must // be reattached when the newly cloned events are first activated - dest.removeAttribute( "_submit_attached" ); dest.removeAttribute( "_change_attached" ); } diff --git a/test/unit/event.js b/test/unit/event.js index d5582190a..32980cd59 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -1062,6 +1062,41 @@ test("trigger(type, [data], [fn])", function() { form.remove(); }); +test( "submit event bubbles on copied forms (#11649)", function(){ + expect( 3 ); + + var $formByClone, $formByHTML, + $testForm = jQuery("#testForm"), + $fixture = jQuery("#qunit-fixture"), + $wrapperDiv = jQuery("<div/>").appendTo( $fixture ); + + function noSubmit( e ) { + e.preventDefault(); + } + function delegatedSubmit() { + ok( true, "Make sure submit event bubbles up." ); + return false; + } + + // Attach a delegated submit handler to the parent element + $fixture.on( "submit", "form", delegatedSubmit ); + + // Trigger form submission to introduce the _submit_attached property + $testForm.on( "submit", noSubmit ).find("input[name=sub1]").click(); + + // Copy the form via .clone() and .html() + $formByClone = $testForm.clone( true, true ).removeAttr("id"); + $formByHTML = jQuery( $fixture.html() ).filter("#testForm").removeAttr("id"); + $wrapperDiv.append( $formByClone, $formByHTML ); + + // Check submit bubbling on the copied forms + $wrapperDiv.find("form").on( "submit", noSubmit ).find("input[name=sub1]").click(); + + // Clean up + $wrapperDiv.remove(); + $fixture.off( "submit", "form", delegatedSubmit ); +}); + test("trigger(eventObject, [data], [fn])", function() { expect(28); |