mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Attributes: strip/collapse whitespace for set values on selects
Fixes gh-2978 Close gh-3002
This commit is contained in:
parent
055cb7534e
commit
7052698191
@ -4,7 +4,8 @@ define( [
|
|||||||
"../core/init"
|
"../core/init"
|
||||||
], function( jQuery, support ) {
|
], function( jQuery, support ) {
|
||||||
|
|
||||||
var rreturn = /\r/g;
|
var rreturn = /\r/g,
|
||||||
|
rspaces = /[\x20\t\r\n\f]+/g;
|
||||||
|
|
||||||
jQuery.fn.extend( {
|
jQuery.fn.extend( {
|
||||||
val: function( value ) {
|
val: function( value ) {
|
||||||
@ -80,9 +81,15 @@ jQuery.extend( {
|
|||||||
option: {
|
option: {
|
||||||
get: function( elem ) {
|
get: function( elem ) {
|
||||||
|
|
||||||
// Support: IE<11
|
var val = jQuery.find.attr( elem, "value" );
|
||||||
// option.value not trimmed (#14858)
|
return val != null ?
|
||||||
return jQuery.trim( elem.value );
|
val :
|
||||||
|
|
||||||
|
// Support: IE10-11+
|
||||||
|
// option.text throws exceptions (#14686, #14858)
|
||||||
|
// Strip and collapse whitespace
|
||||||
|
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
|
||||||
|
jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
select: {
|
select: {
|
||||||
@ -134,7 +141,7 @@ jQuery.extend( {
|
|||||||
while ( i-- ) {
|
while ( i-- ) {
|
||||||
option = options[ i ];
|
option = options[ i ];
|
||||||
if ( option.selected =
|
if ( option.selected =
|
||||||
jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
|
jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
|
||||||
) {
|
) {
|
||||||
optionSet = true;
|
optionSet = true;
|
||||||
}
|
}
|
||||||
|
@ -1107,6 +1107,71 @@ QUnit.test( "val(select) after form.reset() (Bug #2551)", function( assert ) {
|
|||||||
jQuery( "#kk" ).remove();
|
jQuery( "#kk" ).remove();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
QUnit.test( "select.val(space characters) (gh-2978)", function( assert ) {
|
||||||
|
assert.expect( 35 );
|
||||||
|
|
||||||
|
var $select = jQuery( "<select/>" ).appendTo( "#qunit-fixture" ),
|
||||||
|
spaces = {
|
||||||
|
"\\t": {
|
||||||
|
html: "	",
|
||||||
|
val: "\t"
|
||||||
|
},
|
||||||
|
"\\n": {
|
||||||
|
html: " ",
|
||||||
|
val: "\n"
|
||||||
|
},
|
||||||
|
"\\r": {
|
||||||
|
html: " ",
|
||||||
|
val: "\r"
|
||||||
|
},
|
||||||
|
"\\f": "\f",
|
||||||
|
"space": " ",
|
||||||
|
"\\u00a0": "\u00a0",
|
||||||
|
"\\u1680": "\u1680"
|
||||||
|
},
|
||||||
|
html = "";
|
||||||
|
jQuery.each( spaces, function( key, obj ) {
|
||||||
|
var value = obj.html || obj;
|
||||||
|
html += "<option value='attr" + value + "'></option>";
|
||||||
|
html += "<option value='at" + value + "tr'></option>";
|
||||||
|
html += "<option value='" + value + "attr'></option>";
|
||||||
|
} );
|
||||||
|
$select.html( html );
|
||||||
|
|
||||||
|
jQuery.each( spaces, function( key, obj ) {
|
||||||
|
var val = obj.val || obj;
|
||||||
|
$select.val( "attr" + val );
|
||||||
|
assert.equal( $select.val(), "attr" + val, "Value ending with space character (" + key + ") selected (attr)" );
|
||||||
|
|
||||||
|
$select.val( "at" + val + "tr" );
|
||||||
|
assert.equal( $select.val(), "at" + val + "tr", "Value with space character (" + key + ") in the middle selected (attr)" );
|
||||||
|
|
||||||
|
$select.val( val + "attr" );
|
||||||
|
assert.equal( $select.val(), val + "attr", "Value starting with space character (" + key + ") selected (attr)" );
|
||||||
|
} );
|
||||||
|
|
||||||
|
jQuery.each( spaces, function( key, obj ) {
|
||||||
|
var value = obj.html || obj,
|
||||||
|
val = obj.val || obj;
|
||||||
|
html = "";
|
||||||
|
html += "<option>text" + value + "</option>";
|
||||||
|
html += "<option>te" + value + "xt</option>";
|
||||||
|
html += "<option>" + value + "text</option>";
|
||||||
|
$select.html( html );
|
||||||
|
|
||||||
|
$select.val( "text" );
|
||||||
|
assert.equal( $select.val(), "text", "Value with space character at beginning or end is stripped (" + key + ") selected (text)" );
|
||||||
|
|
||||||
|
if ( /^\\u/.test( key ) ) {
|
||||||
|
$select.val( "te" + val + "xt" );
|
||||||
|
assert.equal( $select.val(), "te" + val + "xt", "Value with non-space whitespace character (" + key + ") in the middle selected (text)" );
|
||||||
|
} else {
|
||||||
|
$select.val( "te xt" );
|
||||||
|
assert.equal( $select.val(), "te xt", "Value with space character (" + key + ") in the middle selected (text)" );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
var testAddClass = function( valueObj, assert ) {
|
var testAddClass = function( valueObj, assert ) {
|
||||||
assert.expect( 9 );
|
assert.expect( 9 );
|
||||||
|
|
||||||
@ -1523,17 +1588,22 @@ QUnit.test( "option value not trimmed when setting via parent select", function(
|
|||||||
assert.equal( jQuery( "<select><option> 2</option></select>" ).val( "2" ).val(), "2" );
|
assert.equal( jQuery( "<select><option> 2</option></select>" ).val( "2" ).val(), "2" );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
QUnit.test( "Insignificant white space returned for $(option).val() (#14858)", function( assert ) {
|
QUnit.test( "Insignificant white space returned for $(option).val() (#14858, gh-2978)", function( assert ) {
|
||||||
assert.expect( 3 );
|
assert.expect( 16 );
|
||||||
|
|
||||||
var val = jQuery( "<option></option>" ).val();
|
var val = jQuery( "<option></option>" ).val();
|
||||||
assert.equal( val.length, 0, "Empty option should have no value" );
|
assert.equal( val.length, 0, "Empty option should have no value" );
|
||||||
|
|
||||||
val = jQuery( "<option> </option>" ).val();
|
jQuery.each( [ " ", "\n", "\t", "\f", "\r" ], function( i, character ) {
|
||||||
assert.equal( val.length, 0, "insignificant white-space returned for value" );
|
var val = jQuery( "<option>" + character + "</option>" ).val();
|
||||||
|
assert.equal( val.length, 0, "insignificant white-space returned for value" );
|
||||||
|
|
||||||
val = jQuery( "<option> test </option>" ).val();
|
val = jQuery( "<option>" + character + "test" + character + "</option>" ).val();
|
||||||
assert.equal( val.length, 4, "insignificant white-space returned for value" );
|
assert.equal( val.length, 4, "insignificant white-space returned for value" );
|
||||||
|
|
||||||
|
val = jQuery( "<option>te" + character + "st</option>" ).val();
|
||||||
|
assert.equal( val, "te st", "Whitespace is collapsed in values" );
|
||||||
|
} );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
QUnit.test( "SVG class manipulation (gh-2199)", function( assert ) {
|
QUnit.test( "SVG class manipulation (gh-2199)", function( assert ) {
|
||||||
|
Loading…
Reference in New Issue
Block a user