Skip to content
Permalink
Browse files

Fix #12127, fer real. IE9/10 check state on clone. Close gh-875.

  • Loading branch information...
danielchatfield authored and dmethvin committed Jul 26, 2012
1 parent a475f1a commit 155855b2a9bd95219871210ae7dcacd2a5f7e117
Showing with 15 additions and 3 deletions.
  1. +1 −0 AUTHORS.txt
  2. +2 −3 src/manipulation.js
  3. +12 −0 test/unit/manipulation.js
@@ -129,3 +129,4 @@ David Benjamin <davidben@mit.edu>
Uri Gilad <antishok@gmail.com>
Chris Faulkner <thefaulkner@gmail.com>
Elijah Manor <elijah.manor@gmail.com>
Daniel Chatfield <chatfielddaniel@googlemail.com>
@@ -455,9 +455,8 @@ function cloneFixAttributes( src, dest ) {
// IE6-8 fails to persist the checked state of a cloned checkbox
// or radio button. Worse, IE6-7 fail to give the cloned element
// a checked appearance if the defaultChecked value isn't also set
if ( src.checked ) {
dest.defaultChecked = dest.checked = src.checked;
}

dest.defaultChecked = dest.checked = src.checked;

// IE6-7 get confused and end up setting the value of a cloned
// checkbox/radio button to an empty string instead of "on"
@@ -1895,3 +1895,15 @@ test("html() - script exceptions bubble (#11743)", function() {
ok( false, "error ignored" );
}, "exception bubbled from remote script" );
});

test("checked state is cloned with clone()", function(){
expect(2);

var elem = jQuery.parseHTML("<input type='checkbox' checked='checked'/>")[0];
elem.checked = false;
equal( jQuery(elem).clone().attr("id","clone")[0].checked, false, "Checked false state correctly cloned" );

elem = jQuery.parseHTML("<input type='checkbox'/>")[0];
elem.checked = true;
equal( jQuery(elem).clone().attr("id","clone")[0].checked, true, "Checked true state correctly cloned" );
});

2 comments on commit 155855b

@programmin1

This comment has been minimized.

Copy link

replied Dec 7, 2016

This is apparently broken in the jQuery v1.12.4 that comes with Wordpress.
Run this at the console and you will get true, not false:

var elem = jQuery.parseHTML("<input type='checkbox' checked='checked'/>")[0];
elem.checked = false;
console.log( jQuery(elem).clone()[0].checked);
@mgol

This comment has been minimized.

Copy link
Member

replied Dec 7, 2016

@programmin1 This works fine for me in IE 10: http://jsbin.com/dimowe/edit?html,js,console

If you can tweak this jsbin until it shows the issue you have, please open a new issue with the link to this jsbin.

Please sign in to comment.
You can’t perform that action at this time.