From e1a1aef619f9b05a97895da9b16f03b68da19b85 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Sat, 8 Dec 2012 16:34:22 -0500 Subject: [PATCH] jQuery #12600: attrHooks.value --- src/attributes.js | 19 +++++++++++++++++++ test/attributes.js | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/attributes.js b/src/attributes.js index 8423f826..5a0e1ac0 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -19,3 +19,22 @@ jQuery.attr = function( elem, name, value, pass ) { } return attr.call( jQuery, elem, name, value ); }; + +// attrHooks: value +compatWarnProp( jQuery.attrHooks, "value", { + get: function( elem, name ) { + if ( jQuery.nodeName( elem, "button" ) ) { + return attr.call( jQuery, elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "button" ) ) { + return attr.call( jQuery, elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } +}, "jQuery.attrHooks[\"value\"] is deprecated" ); diff --git a/test/attributes.js b/test/attributes.js index b67f5449..53148b53 100644 --- a/test/attributes.js +++ b/test/attributes.js @@ -67,3 +67,21 @@ test( "attr(jquery_method)", function() { equal( jQuery.compatWarnings.length, warnLength + 1, ".attr(props, true) warned" ); }); + +test( "attrHooks[\"value\"]", function() { + expect( 6 ); + var warnLength = jQuery.compatWarnings.length; + + equal( jQuery("").attr("value"), "", "input.attr('value') returns value property." ); + equal( jQuery("#area1").attr("value"), "foobar", "textarea.attr('value') returns value property." ); + + equal( jQuery.compatWarnings.length, warnLength + 1, ".attr('value') warned" ); + + jQuery.compatReset(); + + jQuery("#text1").attr( "value", "foo" ); + equal( jQuery("#text1")[0].getAttributeNode("value").value, "foo", ".attr( 'value', val ) sets value attribute." ); + equal( jQuery("#text1")[0].value, "foo", ".attr( 'value', val ) sets value property." ); + + equal( jQuery.compatWarnings.length, 1, ".attr( 'value', val ) warned" ); +});