问题
To set data of an <input> element using JavaScript, we assign the value and name of that element like this:
var form = document.createElement("form");
var element = document.createElement("input");
element.value=value;
element.name=name;
In the case of a <select> where the multiple attribute is present, how do I set the value of that select element? For instance, how would I set the value of the myselect element below:
<form method="post" action="/post/" name="myform">
<select multiple name="myselect" id="myselect">
<option value="1">option1</option>
<option value="2">option2</option>
...
I tried to set the value by doing this myselect.value=[1,2] however it does not work. After selecting option1 and option2 I expected that it returns [1,2], but it just returns "1".
回答1:
To programmatically set multiple value options on a multi-select, you need to manually add selected attributes to the <option> elements that you want to select.
One approach to this is as follows:
const select = document.getElementById('myselect')
const selectValues = [1, 2];
/* Iterate options of select element */
for (const option of document.querySelectorAll('#myselect option')) {
/* Parse value to integer */
const value = Number.parseInt(option.value);
/* If option value contained in values, set selected attribute */
if (selectValues.indexOf(value) !== -1) {
option.setAttribute('selected', 'selected');
}
/* Otherwise ensure no selected attribute on option */
else {
option.removeAttribute('selected');
}
}
<select multiple name="myselect" id="myselect">
<option value="1">option1</option>
<option value="2">option2</option>
<option value="3">option3</option>
<option value="4">option4</option>
</select>
回答2:
It works
var element = document.getElementById('selectMultiple');
// Set Values
var values = ["Gold", "Bronze"];
for (var i = 0; i < element.options.length; i++) {
element.options[i].selected = values.indexOf(element.options[i].value) >= 0;
}
// Get Value
var selectedItens = Array.from(element.selectedOptions)
.map(option => option.value)
spanSelectedItens.innerHTML = selectedItens
<select name='selectMultiple' id="selectMultiple" multiple>
<option value="Gold">Gold</option>
<option value="Silver">Silver</option>
<option value="Bronze">Bronze</option>
</select>
<br />
Selected: <span id="spanSelectedItens"></span>
回答3:
You can access the array of select options through the options property of the select object. Every option has a selected property that you can set.
document.myform.myselect.options[0].selected = true;
You can access the options by value using a query selector:
document.myform.myselect.querySelector("option[value="+value+"]")[0].selected = true;
来源:https://stackoverflow.com/questions/55486020/how-to-set-values-of-multiple-select-using-javascript