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:
WU Jun
2013-12-18 09:06:45 +08:00
committed by Jun, WU
parent 30672654c5
commit 9a4a8aa71a
2 changed files with 26 additions and 4 deletions
+12 -4
View File
@@ -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",