]> source.dussan.org Git - jquery.git/commitdiff
Fix value attribute and val for value on button elements. Fixes #1954
authortimmywil <tim.willison@thisismedium.com>
Sun, 17 Apr 2011 22:15:20 +0000 (18:15 -0400)
committertimmywil <tim.willison@thisismedium.com>
Sun, 17 Apr 2011 22:17:31 +0000 (18:17 -0400)
src/attributes.js
test/unit/attributes.js

index 374196e12b0d60dae2d95d1d10d84845921d7550..794b98d75f7b40e6f3abafd5600577164ec6d6f7 100644 (file)
@@ -158,7 +158,7 @@ jQuery.fn.extend({
                        if ( elem ) {
                                hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
 
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem )) !== undefined ) {
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
                                        return ret;
                                }
 
@@ -197,7 +197,7 @@ jQuery.fn.extend({
                        hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
 
                        // If set returns undefined, fall back to normal setting
-                       if ( !hooks || ("set" in hooks && hooks.set( this, val ) === undefined) ) {
+                       if ( !hooks || ("set" in hooks && hooks.set( this, val, "value" ) === undefined) ) {
                                this.value = val;
                        }
                });
@@ -433,7 +433,7 @@ if ( !jQuery.support.getSetAttribute ) {
        
        // Use this for any attribute on a form in IE6/7
        // And the name attribute
-       formHook = jQuery.attrHooks.name = {
+       formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = {
                get: function( elem, name ) {
                        var ret = elem.getAttributeNode( name );
                        // Return undefined if not specified instead of empty string
index a497effa7f8abca3731c21ede0d1110034731169..80ccf71a83bad77866182643d4d63691c6fbc0ea 100644 (file)
@@ -77,7 +77,7 @@ test("prop(String, Object)", function() {
 });
 
 test("attr(String)", function() {
-       expect(32);
+       expect(34);
 
        equals( jQuery("#text1").attr("type"), "text", "Check for type attribute" );
        equals( jQuery("#radio1").attr("type"), "radio", "Check for type attribute" );
@@ -136,6 +136,11 @@ test("attr(String)", function() {
        ok( !!~jQuery("#dl").attr("style").indexOf("position"), "Check style attribute getter, also normalize css props to lowercase" );
        ok( !!~jQuery("#foo").attr("style", "position:absolute;").attr("style").indexOf("position"), "Check style setter" );
 
+       // Check value on button element (#1954)
+       var $button = jQuery("<button value='foobar'>text</button>").insertAfter("#button");
+       equals( $button.attr("value"), "foobar", "Value retrieval on a button does not return innerHTML" );
+       equals( $button.attr("value", "baz").html(), "text", "Setting the value does not change innerHTML" );
+
        ok( jQuery("<div/>").attr("doesntexist") === undefined, "Make sure undefined is returned when no attribute is found." );
        ok( jQuery().attr("doesntexist") === undefined, "Make sure undefined is returned when no element is there." );
 });
@@ -426,7 +431,7 @@ test("removeProp(String)", function() {
 });
 
 test("val()", function() {
-       expect(23);
+       expect(25);
 
        document.getElementById("text1").value = "bla";
        equals( jQuery("#text1").val(), "bla", "Check for modified value of input element" );
@@ -488,6 +493,10 @@ test("val()", function() {
        same( checks.serialize(), "test=1&test=on", "Get multiple checked values." );
 
        checks.remove();
+
+       var $button = jQuery("<button value='foobar'>text</button>").insertAfter("#button");
+       equals( $button.val(), "foobar", "Value retrieval on a button does not return innerHTML" );
+       equals( $button.val("baz").html(), "text", "Setting the value does not change innerHTML" );
 });
 
 var testVal = function(valueObj) {