aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Moon <jmoon@socialcast.com>2012-05-18 16:30:28 -0400
committerDave Methvin <dave.methvin@gmail.com>2012-05-18 16:34:30 -0400
commite93f2a89e277d3fffbc15b4ef82ebc3ac6a840f5 (patch)
tree4e723f589cb175b44adc07d316e6c7dd21a7f682
parent6bf3f20d4e0f69ab14702152880a0574623490e2 (diff)
downloadjquery-e93f2a89e277d3fffbc15b4ef82ebc3ac6a840f5.tar.gz
jquery-e93f2a89e277d3fffbc15b4ef82ebc3ac6a840f5.zip
Fix #11649. Preserve oldIE submit flag when cloning, closes gh-772.
-rw-r--r--src/event.js4
-rw-r--r--src/manipulation.js1
-rw-r--r--test/unit/event.js35
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);