]> source.dussan.org Git - jquery.git/commitdiff
Attributes: do not set properties to false when removing booleans
authorTimmy Willison <timmywillisn@gmail.com>
Sun, 18 Oct 2015 21:21:41 +0000 (17:21 -0400)
committerRichard Gibson <richard.gibson@gmail.com>
Mon, 26 Oct 2015 20:08:49 +0000 (16:08 -0400)
Fixes gh-1759

(cherry picked from commit 47ccf3daadc4b312f850502300129952e70f9d9d)

Conflicts:
src/attributes/attr.js

src/attributes/attr.js
test/unit/attributes.js

index 125e094d9b82273d3d3ca065cad75c6b82b6e590..22945c255923b3fc7c9650bf2e51145ffe8e5357 100644 (file)
@@ -92,29 +92,12 @@ jQuery.extend( {
        },
 
        removeAttr: function( elem, value ) {
-               var name, propName,
+               var name,
                        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 );
                        }
                }
index 6a8f3acfc3553e22566cee02550a347cfd47514e..79b191663b064e60a017e5d2dcef5bf8b97d65e8 100644 (file)
@@ -563,7 +563,7 @@ QUnit.test( "attr('tabindex', value)", function( assert ) {
 } );
 
 QUnit.test( "removeAttr(String)", function( assert ) {
-       assert.expect( 12 );
+       assert.expect( 13 );
        var $first;
 
        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" );
 
        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" );
        assert.equal( document.getElementById( "text1" ).readOnly, false, "removeAttr sets boolean properties to false" );