]> source.dussan.org Git - jquery.git/commitdiff
Fix issue where non-existant attributes on forms in IE6/7 were throwing errors
authortimmywil <tim.willison@thisismedium.com>
Sat, 26 Mar 2011 01:13:25 +0000 (21:13 -0400)
committertimmywil <tim.willison@thisismedium.com>
Sun, 3 Apr 2011 23:13:40 +0000 (19:13 -0400)
src/attributes.js
test/unit/attributes.js

index dd48440200f7b0ccf56e40661e7c760fe15ed3a7..b68b3edf8fc8d8df8147ed5c2f24c56cc8db3ab4 100644 (file)
@@ -311,10 +311,11 @@ jQuery.extend({
                                return undefined;
 
                        } else {
-                               
+
                                // Check form objects in IE (multiple bugs related)
-                               if ( isFormObjects ) {
-                                       elem.getAttributeNode( name ).nodeValue = value;
+                               // Only use nodeValue if the attribute node exists on the form
+                               if ( isFormObjects && (ret = elem.getAttributeNode( name )) ) {
+                                       ret.nodeValue = value;
                                } else {
                                        elem.setAttribute( name, value );
                                }
@@ -330,8 +331,9 @@ jQuery.extend({
                                
                                // Check form objects in IE (multiple bugs related)
                                if ( isFormObjects ) {
-                                       // Return undefined for empty string, which is the blank nodeValue in IE
-                                       ret = elem.getAttributeNode( name ).nodeValue || undefined;
+                                       // Return undefined if not specified instead of empty string
+                                       ret = elem.getAttributeNode( name );
+                                       return ret && ret.specified ? ret.nodeValue : undefined;
                                } else {
                                        ret = elem.getAttribute( name );
                                }
index 161237719ed01969e889e712412eeda379a7b9e5..0260a6c1f3a47dd74f114b6884f8c6e7a514943b 100644 (file)
@@ -75,7 +75,7 @@ test("prop(String, Object)", function() {
 });
 
 test("attr(String)", function() {
-       expect(25);
+       expect(26);
 
        equals( jQuery('#text1').attr('type'), "text", 'Check for type attribute' );
        equals( jQuery('#radio1').attr('type'), "radio", 'Check for type attribute' );
@@ -88,6 +88,7 @@ test("attr(String)", function() {
        equals( jQuery('#name').attr('name'), "name", 'Check for name attribute' );
        equals( jQuery('#text1').attr('name'), "action", 'Check for name attribute' );
        ok( jQuery('#form').attr('action').indexOf("formaction") >= 0, 'Check for action attribute' );
+       equals( jQuery('#form').attr('blah', 'blah').attr('blah'), 'blah', 'Set non-existant attribute on a form' );
        
        // [7472] & [3113] (form contains an input with name="action" or name="id")
        var extras = jQuery('<input name="id" name="name" /><input id="target" name="target" />').appendTo('#testForm');
@@ -214,7 +215,7 @@ test("attr(String, Object)", function() {
        td.attr("colspan", "2");
        equals( td[0].colSpan, 2, "Check colspan is correctly set" );
        table.attr("cellspacing", "2");
-       equals( table[0].cellSpacing, 2, "Check cellspacing is correctly set" );
+       equals( table[0].cellSpacing, "2", "Check cellspacing is correctly set" );
 
        // for #1070
        jQuery("#name").attr('someAttr', '0');
@@ -385,9 +386,9 @@ test("attr('tabindex', value)", function() {
 });
 
 test("removeAttr(String)", function() {
-       expect(1);
+       expect(2);
        equals( jQuery('#mark').removeAttr( "class" )[0].className, "", "remove class" );
-
+       equals( jQuery('#form').removeAttr('id').attr('id'), undefined, 'Remove id' );
 });
 
 test("removeProp(String)", function() {