attrFix: {
// Always normalize to ensure hook usage
- tabindex: "tabIndex"
+ tabindex: "tabIndex",
+ readonly: "readOnly"
},
attr: function( elem, name, value, pass ) {
if ( jQuery.support.getSetAttribute ) {
elem.removeAttribute( name );
} else {
- // Set to default empty string (No longer need to use attr for this)
- elem.setAttribute( name, "" );
- // Attempt to remove completely with DOM level 1
- elem.removeAttributeNode( elem.getAttributeNode( name ) );
+ // Only style is a special case.
+ if ( name === "style" ) {
+ elem.style.cssText = "";
+ } else {
+ elem.setAttribute( name, "" );
+ // Attempt to remove completely with DOM level 1
+ elem.removeAttributeNode( elem.getAttributeNode( name ) );
+ }
}
}
},
jQuery.attrFix = jQuery.extend( jQuery.attrFix, {
"for": "htmlFor",
"class": "className",
- readonly: "readOnly",
maxlength: "maxLength",
cellspacing: "cellSpacing",
rowspan: "rowSpan",
}
// Remove certain attrs if set to false
-jQuery.each([ "selected", "checked", "readonly", "disabled" ], function( i, name ) {
- name = jQuery.attrFix[ name ] || name;
-
+jQuery.each([ "selected", "checked", "readOnly", "disabled" ], function( i, name ) {
jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
set: function( elem, value ) {
- if ( !value ) { // '', undefined, false, null will remove attr
+ if ( !value ) {
jQuery.removeAttr( elem, name );
return false;
}
}
if ( !jQuery.support.style ) {
- jQuery.propHooks.style = jQuery.attrHooks.style = {
+ jQuery.attrHooks.style = {
get: function( elem ) {
- return elem.style.cssText;
+ // Return undefined in the case of empty string
+ return elem.style.cssText || undefined;
},
set: function( elem, value ) {
return (elem.style.cssText = "" + value);
if ( !jQuery.support.getSetAttribute ) {
propsShouldBe = {
tabindex: "tabIndex",
+ readonly: "readOnly",
"for": "htmlFor",
"class": "className",
- readonly: "readOnly",
maxlength: "maxLength",
cellspacing: "cellSpacing",
rowspan: "rowSpan",
};
} else {
propsShouldBe = {
- tabindex: "tabIndex"
+ tabindex: "tabIndex",
+ readonly: "readOnly"
};
}
});
test("attr(String, Object)", function() {
- expect(29);
+ expect(30);
var div = jQuery("div").attr("foo", "bar"),
fail = false;
equals( jQuery("#name").attr('name'), undefined, 'Remove name attribute' );
jQuery("#check2").attr('checked', true);
equals( document.getElementById('check2').checked, true, 'Set checked attribute' );
+ jQuery("#check2").attr('checked', '');
+ equals( document.getElementById('check2').checked, false, 'Setting checked to empty string removes it' );
jQuery("#check2").attr('checked', false);
equals( document.getElementById('check2').checked, false, 'Set checked attribute' );
jQuery("#text1").attr('readonly', true);
});
test("removeAttr(String)", function() {
- expect(2);
+ expect(4);
equals( jQuery('#mark').removeAttr( "class" )[0].className, "", "remove class" );
equals( jQuery('#form').removeAttr('id').attr('id'), undefined, 'Remove id' );
+ equals( jQuery('#foo').attr('style', 'position:absolute;').removeAttr('style').attr('style'), undefined, 'Check removing style attribute' );
+ equals( jQuery('#form').attr('style', 'position:absolute;').removeAttr('style').attr('style'), undefined, 'Check removing style attribute on a form' );
});
test("removeProp(String)", function() {