aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Moon <jmoon@socialcast.com>2012-05-21 18:01:59 -0500
committerDave Methvin <dave.methvin@gmail.com>2012-05-22 21:29:13 -0400
commit4757881759931bfddf32c26de6831f888b8cd20a (patch)
treeccbe8a6b755f0f4d5e9b8fcd0661a0f230e1c270
parentb5a84a48f4317a188aa78051d4f0cf12db9d7873 (diff)
downloadjquery-4757881759931bfddf32c26de6831f888b8cd20a.tar.gz
jquery-4757881759931bfddf32c26de6831f888b8cd20a.zip
Fix #11796. Preserve oldIE change delegation on clone. Closes gh-789.
-rw-r--r--src/event.js4
-rw-r--r--src/manipulation.js4
-rw-r--r--test/unit/event.js32
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);