aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Chatfield <chatfielddaniel@googlemail.com>2012-07-25 09:32:33 -0400
committerDave Methvin <dave.methvin@gmail.com>2012-07-25 09:32:33 -0400
commit569d064fc93459695cb6eb6fd09e5ba3fda62f03 (patch)
tree50958d840e6175f6897edb650eaf43d85f6ecd4b
parentfffd23285adfc31e994c0c83503eb283eab75bbd (diff)
downloadjquery-569d064fc93459695cb6eb6fd09e5ba3fda62f03.tar.gz
jquery-569d064fc93459695cb6eb6fd09e5ba3fda62f03.zip
Fix #12127. IE9/10 checks fall off the box on clone. Close gh-873.
-rw-r--r--AUTHORS.txt1
-rw-r--r--src/manipulation.js4
-rw-r--r--src/support.js6
-rw-r--r--test/unit/manipulation.js11
4 files changed, 16 insertions, 6 deletions
diff --git a/AUTHORS.txt b/AUTHORS.txt
index 774d11b32..51200abaf 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -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>
diff --git a/src/manipulation.js b/src/manipulation.js
index 212eaf6bb..fa6083c09 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -455,9 +455,7 @@ 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"
diff --git a/src/support.js b/src/support.js
index e4a8b7c83..5bedb4dcb 100644
--- a/src/support.js
+++ b/src/support.js
@@ -15,7 +15,7 @@ jQuery.support = (function() {
// Preliminary tests
div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+ div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox' checked='checked'/>";
all = div.getElementsByTagName("*");
a = div.getElementsByTagName("a")[ 0 ];
@@ -96,8 +96,8 @@ jQuery.support = (function() {
};
// Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
+ input.checked = false;
+ support.noCloneChecked = !input.cloneNode( true ).checked;
// Make sure that the options inside disabled selects aren't marked as disabled
// (WebKit marks them as disabled)
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index 31426e739..e2b00a662 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -1895,3 +1895,14 @@ 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' );
+});