Fix value attribute and val for value on button elements. Fixes #1954
This commit is contained in:
parent
15da298f72
commit
34d80709ce
|
@ -158,7 +158,7 @@ jQuery.fn.extend({
|
||||||
if ( elem ) {
|
if ( elem ) {
|
||||||
hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ jQuery.fn.extend({
|
||||||
hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
|
hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
|
||||||
|
|
||||||
// If set returns undefined, fall back to normal setting
|
// 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;
|
this.value = val;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -433,7 +433,7 @@ if ( !jQuery.support.getSetAttribute ) {
|
||||||
|
|
||||||
// Use this for any attribute on a form in IE6/7
|
// Use this for any attribute on a form in IE6/7
|
||||||
// And the name attribute
|
// And the name attribute
|
||||||
formHook = jQuery.attrHooks.name = {
|
formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = {
|
||||||
get: function( elem, name ) {
|
get: function( elem, name ) {
|
||||||
var ret = elem.getAttributeNode( name );
|
var ret = elem.getAttributeNode( name );
|
||||||
// Return undefined if not specified instead of empty string
|
// Return undefined if not specified instead of empty string
|
||||||
|
|
|
@ -77,7 +77,7 @@ test("prop(String, Object)", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("attr(String)", function() {
|
test("attr(String)", function() {
|
||||||
expect(32);
|
expect(34);
|
||||||
|
|
||||||
equals( jQuery("#text1").attr("type"), "text", "Check for type attribute" );
|
equals( jQuery("#text1").attr("type"), "text", "Check for type attribute" );
|
||||||
equals( jQuery("#radio1").attr("type"), "radio", "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("#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" );
|
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("<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." );
|
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() {
|
test("val()", function() {
|
||||||
expect(23);
|
expect(25);
|
||||||
|
|
||||||
document.getElementById("text1").value = "bla";
|
document.getElementById("text1").value = "bla";
|
||||||
equals( jQuery("#text1").val(), "bla", "Check for modified value of input element" );
|
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." );
|
same( checks.serialize(), "test=1&test=on", "Get multiple checked values." );
|
||||||
|
|
||||||
checks.remove();
|
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) {
|
var testVal = function(valueObj) {
|
||||||
|
|
Loading…
Reference in a new issue