mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Attributes: do not set properties to false when removing booleans
Fixes gh-1759
(cherry picked from commit 47ccf3daad
)
Conflicts:
src/attributes/attr.js
This commit is contained in:
parent
a93d1d7d78
commit
5c086c3782
@ -92,29 +92,12 @@ jQuery.extend( {
|
|||||||
},
|
},
|
||||||
|
|
||||||
removeAttr: function( elem, value ) {
|
removeAttr: function( elem, value ) {
|
||||||
var name, propName,
|
var name,
|
||||||
i = 0,
|
i = 0,
|
||||||
attrNames = value && value.match( rnotwhite );
|
attrNames = value && value.match( rnotwhite );
|
||||||
|
|
||||||
if ( attrNames && elem.nodeType === 1 ) {
|
if ( attrNames && elem.nodeType === 1 ) {
|
||||||
while ( ( name = attrNames[ i++ ] ) ) {
|
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 );
|
elem.removeAttribute( name );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -563,7 +563,7 @@ QUnit.test( "attr('tabindex', value)", function( assert ) {
|
|||||||
} );
|
} );
|
||||||
|
|
||||||
QUnit.test( "removeAttr(String)", function( assert ) {
|
QUnit.test( "removeAttr(String)", function( assert ) {
|
||||||
assert.expect( 12 );
|
assert.expect( 13 );
|
||||||
var $first;
|
var $first;
|
||||||
|
|
||||||
assert.equal( jQuery( "#mark" ).removeAttr( "class" ).attr( "class" ), undefined, "remove class" );
|
assert.equal( jQuery( "#mark" ).removeAttr( "class" ).attr( "class" ), undefined, "remove class" );
|
||||||
@ -574,7 +574,9 @@ 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" );
|
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" );
|
jQuery( "#check1" ).removeAttr( "checked" ).prop( "checked", true ).removeAttr( "checked" );
|
||||||
assert.equal( document.getElementById( "check1" ).checked, false, "removeAttr sets boolean properties to false" );
|
assert.equal( document.getElementById( "check1" ).checked, true, "removeAttr should not set checked to false, since the checked attribute does NOT mirror the checked property" );
|
||||||
|
jQuery( "#option1b" ).attr( "selected", "selected" ).removeAttr( "selected" ).attr( "selected", "selected" );
|
||||||
|
assert.notEqual( document.getElementById( "select1" ).selectedIndex, 1, "Once the selected attribute is dirty, subsequent settings should not select the option (gh-1759)" );
|
||||||
jQuery( "#text1" ).prop( "readOnly", true ).removeAttr( "readonly" );
|
jQuery( "#text1" ).prop( "readOnly", true ).removeAttr( "readonly" );
|
||||||
assert.equal( document.getElementById( "text1" ).readOnly, false, "removeAttr sets boolean properties to false" );
|
assert.equal( document.getElementById( "text1" ).readOnly, false, "removeAttr sets boolean properties to false" );
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user