mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Do not automatically select other options
For <select multiple />, `value` is an array and should not be converted to a string.
This commit is contained in:
@@ -59,13 +59,21 @@ function selectValueType(props, propName, componentName) {
|
||||
*/
|
||||
function updateOptions() {
|
||||
/*jshint validthis:true */
|
||||
var multiple = this.props.multiple;
|
||||
var propValue = this.getValue();
|
||||
var value = propValue != null ? propValue : this.state.value;
|
||||
var options = this.getDOMNode().options;
|
||||
var selectedValue = '' + value;
|
||||
|
||||
for (var i = 0, l = options.length; i < l; i++) {
|
||||
var selected = this.props.multiple ?
|
||||
var selectedValue, i, l;
|
||||
if (multiple) {
|
||||
selectedValue = [];
|
||||
for (i = 0, l = value.length; i < l; ++i) {
|
||||
selectedValue.push('' + value[i]);
|
||||
}
|
||||
} else {
|
||||
selectedValue = '' + value;
|
||||
}
|
||||
for (i = 0, l = options.length; i < l; i++) {
|
||||
var selected = multiple ?
|
||||
selectedValue.indexOf(options[i].value) >= 0 :
|
||||
selected = options[i].value === selectedValue;
|
||||
|
||||
|
||||
@@ -116,6 +116,20 @@ describe('ReactDOMSelect', function() {
|
||||
expect(node.options[2].selected).toBe(false); // gorilla
|
||||
});
|
||||
|
||||
it('should not select other options automatically', function() {
|
||||
var stub =
|
||||
<select multiple={true} value={['12']}>
|
||||
<option value="1">one</option>
|
||||
<option value="2">two</option>
|
||||
<option value="12">twelve</option>
|
||||
</select>;
|
||||
var node = renderSelect(stub);
|
||||
|
||||
expect(node.options[0].selected).toBe(false); // one
|
||||
expect(node.options[1].selected).toBe(false); // two
|
||||
expect(node.options[2].selected).toBe(true); // twelve
|
||||
});
|
||||
|
||||
it('should allow setting `value` with `objectToString`', function() {
|
||||
var objectToString = {
|
||||
animal: "giraffe",
|
||||
|
||||
Reference in New Issue
Block a user