]> source.dussan.org Git - jquery.git/commitdiff
Fix #13011. Let 'type' attribute be set if the browser allows.
authorDave Methvin <dave.methvin@gmail.com>
Wed, 12 Dec 2012 04:03:12 +0000 (23:03 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Wed, 12 Dec 2012 04:16:08 +0000 (23:16 -0500)
src/attributes.js
test/unit/attributes.js

index ffba0b1c7a7e9ba76c3fd1635b8023537a471cef..ffeab3c69dc160e031d3b76108b736371d2a0817 100644 (file)
@@ -1,7 +1,6 @@
 var nodeHook, boolHook, fixSpecified,
        rclass = /[\t\r\n]/g,
        rreturn = /\r/g,
-       rtype = /^(?:input|button)$/i,
        rfocusable = /^(?:input|select|textarea|button|object)$/i,
        rclickable = /^(?:a|area)$/i,
        rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
@@ -366,13 +365,9 @@ jQuery.extend({
        attrHooks: {
                type: {
                        set: function( elem, value ) {
-                               // We can't allow the type property to be changed (since it causes problems in IE)
-                               if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-                                       jQuery.error( "type property can't be changed" );
-                               } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+                               if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
                                        // Setting the type on a radio button after the value resets the value in IE6-9
-                                       // Reset value to it's default in case type is set after value
-                                       // This is for element creation
+                                       // Reset value to default in case type is set after value during creation
                                        var val = elem.value;
                                        elem.setAttribute( "type", value );
                                        if ( val ) {
index d3dbd4f1712d1c74efb6bd1ed7680ed8339d82b8..3144dc626509faf55fe8b1e41bc541a3af02a1ee 100644 (file)
@@ -221,7 +221,7 @@ test( "attr(Hash)", function() {
 });
 
 test( "attr(String, Object)", function() {
-       expect( 81 );
+       expect( 79 );
 
        var div = jQuery("div").attr("foo", "bar"),
                fail = false;
@@ -379,14 +379,12 @@ test( "attr(String, Object)", function() {
 
        // Type
        var type = jQuery("#check2").attr("type");
-       var thrown = false;
        try {
                jQuery("#check2").attr( "type", "hidden" );
+               ok( true, "No exception thrown on input type change" );
        } catch( e ) {
-               thrown = true;
+               ok( true, "Exception thrown on input type change: " + e );
        }
-       ok( thrown, "Exception thrown when trying to change type property" );
-       equal( type, jQuery("#check2").attr("type"), "Verify that you can't change the type of an input element" );
 
        var check = document.createElement("input");
        thrown = true;
@@ -409,14 +407,12 @@ test( "attr(String, Object)", function() {
        equal( "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");
-       thrown = false;
        try {
                button.attr( "type", "submit" );
+               ok( true, "No exception thrown on button type change" );
        } catch( e ) {
-               thrown = true;
+               ok( true, "Exception thrown on button type change: " + e );
        }
-       ok( thrown, "Exception thrown when trying to change type property" );
-       equal( "button", button.attr("type"), "Verify that you can't change the type of a button element" );
 
        var $radio = jQuery( "<input>", {
                "value": "sup",