diff --git a/src/attributes.js b/src/attributes.js index 97638632..991c2a20 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 80efed82..5f35e948 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" );