fix for #3688, setting type attribute on button causes IE to throw error
authorBrandon Aaron <brandon.aaron@gmail.com>
Tue, 17 Mar 2009 22:27:25 +0000 (22:27 +0000)
committerBrandon Aaron <brandon.aaron@gmail.com>
Tue, 17 Mar 2009 22:27:25 +0000 (22:27 +0000)
src/core.js
test/index.html
test/unit/core.js

index 446c82e..271e7c4 100644 (file)
@@ -1004,7 +1004,7 @@ jQuery.extend({
                        if ( name in elem && notxml && !special ) {
                                if ( set ){
                                        // We can't allow the type property to be changed (since it causes problems in IE)
-                                       if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
+                                       if ( name == "type" && elem.nodeName.match(/(button|input)/i) && elem.parentNode )
                                                throw "type property can't be changed";
 
                                        elem[ name ] = value;
index 4c47d92..97d9d60 100644 (file)
@@ -70,7 +70,7 @@
                        <input type="text" id="name" name="name" value="name" />
                        <input type="search" id="search" name="search" value="search" />
                        
-                       <button id="button" name="button">Button</button>
+                       <button id="button" name="button" type="button">Button</button>
                        
                        <textarea id="area1" maxlength="30">foobar</textarea>
                        
index a4e82eb..289a8ba 100644 (file)
@@ -463,7 +463,7 @@ test("attr(Hash)", function() {
 });
 
 test("attr(String, Object)", function() {
-       expect(19);
+       expect(21);
        var div = jQuery("div").attr("foo", "bar"),
                fail = false;
        for ( var i = 0; i < div.size(); i++ ) {
@@ -537,6 +537,16 @@ test("attr(String, Object)", function() {
        }
        ok( thrown, "Exception thrown when trying to change type property" );
        equals( "checkbox", check.attr('type'), "Verify that you can change the type of an input element that isn't in the DOM" );
+       
+       var button = jQuery("#button");
+       var thrown = false;
+       try {
+               button.attr('type','submit');
+       } catch(e) {
+               thrown = true;
+       }
+       ok( thrown, "Exception thrown when trying to change type property" );
+       equals( "button", button.attr('type'), "Verify that you can't change the type of a button element" );
 });
 
 if ( !isLocal ) {