Revert "Attributes: do not set properties to false when removing booleans"

This reverts commit 5c086c3782.
This commit is contained in:
Oleg Gaidarenko 2015-12-22 14:16:55 +03:00
parent 83391859bd
commit b87e93bdc9
2 changed files with 19 additions and 2 deletions

View File

@ -92,12 +92,29 @@ jQuery.extend( {
},
removeAttr: function( elem, value ) {
var name,
var name, propName,
i = 0,
attrNames = value && value.match( rnotwhite );
if ( attrNames && elem.nodeType === 1 ) {
while ( ( name = attrNames[ i++ ] ) ) {
propName = jQuery.propFix[ name ] || name;
// Boolean attributes get special treatment (#10870)
if ( jQuery.expr.match.bool.test( name ) ) {
// Set corresponding property to false
if ( getSetInput || !ruseDefault.test( name ) ) {
elem[ propName ] = false;
// Support: IE<9
// Also clear defaultChecked/defaultSelected (if appropriate)
} else {
elem[ jQuery.camelCase( "default-" + name ) ] =
elem[ propName ] = false;
}
}
elem.removeAttribute( name );
}
}

View File

@ -574,7 +574,7 @@ QUnit.test( "removeAttr(String)", function( assert ) {
assert.equal( jQuery( "#fx-test-group" ).attr( "height", "3px" ).removeAttr( "height" ).get( 0 ).style.height, "1px", "Removing height attribute has no effect on height set with style attribute" );
jQuery( "#check1" ).removeAttr( "checked" ).prop( "checked", true ).removeAttr( "checked" );
assert.equal( document.getElementById( "check1" ).checked, true, "removeAttr should not set checked to false, since the checked attribute does NOT mirror the checked property" );
assert.equal( document.getElementById( "check1" ).checked, false, "removeAttr sets boolean properties to false" );
jQuery( "#text1" ).prop( "readOnly", true ).removeAttr( "readonly" );
assert.equal( document.getElementById( "text1" ).readOnly, false, "removeAttr sets boolean properties to false" );