Commit 47578817 authored by Jason Moon's avatar Jason Moon Committed by Dave Methvin

Fix #11796. Preserve oldIE change delegation on clone. Closes gh-789.

parent b5a84a48
...@@ -835,13 +835,13 @@ if ( !jQuery.support.changeBubbles ) { ...@@ -835,13 +835,13 @@ if ( !jQuery.support.changeBubbles ) {
jQuery.event.add( this, "beforeactivate._change", function( e ) { jQuery.event.add( this, "beforeactivate._change", function( e ) {
var elem = e.target; 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 ) { jQuery.event.add( elem, "change._change", function( event ) {
if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
jQuery.event.simulate( "change", this.parentNode, event, true ); jQuery.event.simulate( "change", this.parentNode, event, true );
} }
}); });
elem._change_attached = true; jQuery._data( elem, "_change_attached", true );
} }
}); });
}, },
......
...@@ -464,10 +464,6 @@ function cloneFixAttributes( src, dest ) { ...@@ -464,10 +464,6 @@ function cloneFixAttributes( src, dest ) {
// Event data gets referenced instead of copied if the expando // Event data gets referenced instead of copied if the expando
// gets copied too // gets copied too
dest.removeAttribute( jQuery.expando ); 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 ) { jQuery.buildFragment = function( args, context, scripts ) {
......
...@@ -1098,6 +1098,38 @@ test( "submit event bubbles on copied forms (#11649)", function(){ ...@@ -1098,6 +1098,38 @@ test( "submit event bubbles on copied forms (#11649)", function(){
$testForm.off( "submit", noSubmit ); $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() { test("trigger(eventObject, [data], [fn])", function() {
expect(28); expect(28);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment