aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/attributes/val.js41
-rw-r--r--test/unit/attributes.js51
2 files changed, 70 insertions, 22 deletions
diff --git a/src/attributes/val.js b/src/attributes/val.js
index 38e170ba8..f200f97ee 100644
--- a/src/attributes/val.js
+++ b/src/attributes/val.js
@@ -1,11 +1,10 @@
import jQuery from "../core.js";
+import isIE from "../var/isIE.js";
import stripAndCollapse from "../core/stripAndCollapse.js";
import nodeName from "../core/nodeName.js";
import "../core/init.js";
-var rreturn = /\r/g;
-
jQuery.fn.extend( {
val: function( value ) {
var hooks, ret, valueIsFunction,
@@ -25,11 +24,6 @@ jQuery.fn.extend( {
ret = elem.value;
- // Handle most common string cases
- if ( typeof ret === "string" ) {
- return ret.replace( rreturn, "" );
- }
-
// Handle cases where value is null/undef or number
return ret == null ? "" : ret;
}
@@ -77,20 +71,6 @@ jQuery.fn.extend( {
jQuery.extend( {
valHooks: {
- option: {
- get: function( elem ) {
-
- var val = elem.getAttribute( "value" );
- return val != null ?
- val :
-
- // Support: IE <=10 - 11+
- // option.text throws exceptions (#14686, #14858)
- // Strip and collapse whitespace
- // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
- stripAndCollapse( jQuery.text( elem ) );
- }
- },
select: {
get: function( elem ) {
var value, option, i,
@@ -144,7 +124,7 @@ jQuery.extend( {
option = options[ i ];
if ( ( option.selected =
- jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+ jQuery.inArray( jQuery( option ).val(), values ) > -1
) ) {
optionSet = true;
}
@@ -160,6 +140,23 @@ jQuery.extend( {
}
} );
+if ( isIE ) {
+ jQuery.valHooks.option = {
+ get: function( elem ) {
+
+ var val = elem.getAttribute( "value" );
+ return val != null ?
+ val :
+
+ // Support: IE <=10 - 11+
+ // option.text throws exceptions (#14686, #14858)
+ // Strip and collapse whitespace
+ // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+ stripAndCollapse( jQuery.text( elem ) );
+ }
+ };
+}
+
// Radios and checkboxes getter/setter
jQuery.each( [ "radio", "checkbox" ], function() {
jQuery.valHooks[ this ] = {
diff --git a/test/unit/attributes.js b/test/unit/attributes.js
index 386aadaf3..d592314a0 100644
--- a/test/unit/attributes.js
+++ b/test/unit/attributes.js
@@ -1196,6 +1196,57 @@ QUnit.test( "select.val(space characters) (gh-2978)", function( assert ) {
} );
} );
+QUnit.test( "radio.val(space characters)", function( assert ) {
+ assert.expect( 42 );
+
+ var radio = jQuery( "<input type='radio'/>" ).appendTo( "#qunit-fixture" ),
+ spaces = {
+ "\\t": {
+ html: "&#09;",
+ val: "\t"
+ },
+ "\\n": {
+ html: "&#10;",
+ val: "\n"
+ },
+ "\\r": {
+ html: "&#13;",
+ val: "\r"
+ },
+ "\\f": "\f",
+ "space": " ",
+ "\\u00a0": "\u00a0",
+ "\\u1680": "\u1680"
+ };
+
+ jQuery.each( spaces, function( key, obj ) {
+ var val = obj.val || obj;
+
+ radio.val( "attr" + val );
+ assert.equal( radio.val(), "attr" + val, "Value ending with space character (" + key + ") returned (set via val())" );
+
+ radio.val( "at" + val + "tr" );
+ assert.equal( radio.val(), "at" + val + "tr", "Value with space character (" + key + ") in the middle returned (set via val())" );
+
+ radio.val( val + "attr" );
+ assert.equal( radio.val(), val + "attr", "Value starting with space character (" + key + ") returned (set via val())" );
+ } );
+
+ jQuery.each( spaces, function( key, obj ) {
+ var val = obj.val || obj,
+ htmlVal = obj.html || obj;
+
+ radio = jQuery( "<input type='radio' value='attr" + htmlVal + "'/>" ).appendTo( "#qunit-fixture" );
+ assert.equal( radio.val(), "attr" + val, "Value ending with space character (" + key + ") returned (set via HTML)" );
+
+ radio = jQuery( "<input type='radio' value='at" + htmlVal + "tr'/>" ).appendTo( "#qunit-fixture" );
+ assert.equal( radio.val(), "at" + val + "tr", "Value with space character (" + key + ") in the middle returned (set via HTML)" );
+
+ radio = jQuery( "<input type='radio' value='" + htmlVal + "attr'/>" ).appendTo( "#qunit-fixture" );
+ assert.equal( radio.val(), val + "attr", "Value starting with space character (" + key + ") returned (set via HTML)" );
+ } );
+} );
+
var testAddClass = function( valueObj, assert ) {
assert.expect( 9 );