From: timmywil Date: Wed, 4 May 2011 19:53:00 +0000 (-0400) Subject: Set the property corresponding to a boolean attribute when setting to true. Fixes... X-Git-Tag: 1.6.1rc1~29 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5195335cf4df62c06488807ae857f64c2d549253;p=jquery.git Set the property corresponding to a boolean attribute when setting to true. Fixes #9103. - Once boolean properties had been modified natively, setting the attribute no longer set the current value --- diff --git a/src/attributes.js b/src/attributes.js index 97638632c..991c2a204 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -301,7 +301,7 @@ jQuery.extend({ return jQuery( elem )[ name ]( value ); } - var ret, hooks, + var ret, hooks, boolProp, notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); // Normalize the name if needed @@ -326,7 +326,12 @@ jQuery.extend({ } else { // Set boolean attributes to the same name + // Also set the DOM property if ( value === true && !rspecial.test( name ) ) { + boolProp = jQuery.propFix[ name ] || name; + if ( !rinvalidChar.test( boolProp ) && typeof elem[ boolProp ] === "boolean" ) { + elem[ boolProp ] = true; + } value = name.toLowerCase(); } @@ -338,7 +343,6 @@ jQuery.extend({ return hooks.get( elem, name ); } else { - var boolProp; // Align boolean attributes with corresponding properties // Do not check the property if the name contains characters diff --git a/test/unit/attributes.js b/test/unit/attributes.js index 80efed829..5f35e9482 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -163,7 +163,8 @@ test("attr(String, Object)", function() { equals( jQuery("#name").attr("name"), "something", "Set name attribute" ); jQuery("#name").attr("name", null); equals( jQuery("#name").attr("name"), undefined, "Remove name attribute" ); - jQuery("#check2").attr("checked", true); + + jQuery("#check2").prop("checked", true).prop("checked", false).attr("checked", true); equals( document.getElementById("check2").checked, true, "Set checked attribute" ); equals( jQuery("#check2").prop("checked"), true, "Set checked attribute" ); equals( jQuery("#check2").attr("checked"), "checked", "Set checked attribute" );