Skip to content
Permalink
Browse files

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

  • Loading branch information...
MoonScript authored and dmethvin committed May 21, 2012
1 parent b5a84a4 commit 4757881759931bfddf32c26de6831f888b8cd20a
Showing with 34 additions and 6 deletions.
  1. +2 −2 src/event.js
  2. +0 −4 src/manipulation.js
  3. +32 −0 test/unit/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 );
}
});
},
@@ -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 ) {
@@ -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);

0 comments on commit 4757881

Please sign in to comment.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.