Skip to content

Commit

Permalink
Do not set boolean attributes to empty string on removal. Fixes #1087…
Browse files Browse the repository at this point in the history
…0. +0 bytes compressed
  • Loading branch information
timmywil committed Mar 5, 2012
1 parent 8013163 commit d332046
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 4 deletions.
10 changes: 7 additions & 3 deletions src/attributes.js
Expand Up @@ -352,7 +352,7 @@ jQuery.extend({
},

removeAttr: function( elem, value ) {
var propName, attrNames, name, l,
var propName, attrNames, name, l, isBool,
i = 0;

if ( value && elem.nodeType === 1 ) {
Expand All @@ -364,13 +364,17 @@ jQuery.extend({

if ( name ) {
propName = jQuery.propFix[ name ] || name;
isBool = rboolean.test( name );

// See #9699 for explanation of this approach (setting first, then removal)
jQuery.attr( elem, name, "" );
// Do not do this for boolean attributes (see #10870)
if ( !isBool ) {
jQuery.attr( elem, name, "" );
}
elem.removeAttribute( getSetAttribute ? name : propName );

// Set corresponding property to false for boolean attributes
if ( rboolean.test( name ) && propName in elem ) {
if ( isBool && propName in elem ) {
elem[ propName ] = false;
}
}
Expand Down
5 changes: 4 additions & 1 deletion test/unit/attributes.js
Expand Up @@ -464,7 +464,7 @@ test("attr('tabindex', value)", function() {
});

test("removeAttr(String)", function() {
expect(9);
expect( 10 );
var $first;

equal( jQuery("#mark").removeAttr( "class" ).attr("class"), undefined, "remove class" );
Expand All @@ -479,6 +479,9 @@ test("removeAttr(String)", function() {
jQuery("#text1").prop("readOnly", true).removeAttr("readonly");
equal( document.getElementById("text1").readOnly, false, "removeAttr sets boolean properties to false" );

jQuery("#option2c").removeAttr("selected");
equal( jQuery("#option2d").attr("selected"), "selected", "Removing `selected` from an option that is not selected does not remove selected from the currently selected option (#10870)");

try {
$first = jQuery("#first").attr("contenteditable", "true").removeAttr("contenteditable");
equal( $first.attr('contenteditable'), undefined, "Remove the contenteditable attribute" );
Expand Down

0 comments on commit d332046

Please sign in to comment.