Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Do not set boolean attributes to empty string on removal. Fixes #1087…

…0. +0 bytes compressed
  • Loading branch information...
commit d3320462df1253196e61b2daadc3cdfe1b4c3771 1 parent 8013163
@timmywil timmywil authored
Showing with 11 additions and 4 deletions.
  1. +7 −3 src/attributes.js
  2. +4 −1 test/unit/attributes.js
View
10 src/attributes.js
@@ -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 ) {
@@ -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;
}
}
View
5 test/unit/attributes.js
@@ -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" );
@@ -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" );
Please sign in to comment.
Something went wrong with that request. Please try again.