Handle changing form attributes correctly when there is a child element with the...
authorDavid Petersen <public@petersendidit.com>
Mon, 7 Dec 2009 23:43:36 +0000 (07:43 +0800)
committerJohn Resig <jeresig@gmail.com>
Wed, 9 Dec 2009 06:43:55 +0000 (14:43 +0800)
src/attributes.js
test/unit/attributes.js

index b5a29e1..4405b43 100644 (file)
@@ -218,7 +218,13 @@ jQuery.extend({
                                        if ( name == "type" && /(button|input)/i.test(elem.nodeName) && elem.parentNode ) {
                                                throw "type property can't be changed";
                                        }
-                                       elem[ name ] = value;
+                                       // browsers index elements by id/name on forms, give priority to attributes.
+                                       if( jQuery.nodeName( elem, "form" ) ) {
+                                               // convert the value to a string (all browsers do this but IE) see #1070
+                                               elem.setAttribute( name, "" + value );
+                                       } else {
+                                               elem[ name ] = value;
+                                       }
                                }
 
                                // browsers index elements by id/name on forms, give priority to attributes.
index aa5bd7c..e0425c4 100644 (file)
@@ -1,7 +1,7 @@
 module("attributes");
 
 test("attr(String)", function() {
-       expect(27);
+       expect(28);
        
        // This one sometimes fails randomally ?!
        equals( jQuery('#text1').attr('value'), "Test", 'Check for value attribute' );
@@ -18,6 +18,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' );
+       ok( jQuery('#form').attr('action','newformaction').attr('action').indexOf("newformaction") >= 0, 'Check that action attribute was changed' );
        equals( jQuery('#text1').attr('maxlength'), '30', 'Check for maxlength attribute' );
        equals( jQuery('#text1').attr('maxLength'), '30', 'Check for maxLength attribute' );
        equals( jQuery('#area1').attr('maxLength'), '30', 'Check for maxLength attribute' );