Получение выбранных значений в теге multiselect в Javascript
У меня есть следующий код
function searchFlights() {
var select1 = document.getElementById("airports-select-1");
var selected1 = [];
while(select1.selectedIndex != -1) {
if(select1.selectedIndex != 0) selected1.push(select1.options[select1.selectedIndex].value);
select1.options[select1.selectedIndex].selected = false;
}
console.log(selected1);
}
Это работает правильно, но как видно из кода этой строки:
select1.options[select1.selectedIndex].selected = false;
Выполняет отмену значения.
Теперь я не хочу отменять значения. Если я раскомментирую эту строку в коде, код будет работать вечно.
Есть ли еще более изысканное и сложное решение для извлечения нескольких значений из тега select с помощью Javascript?
Ответы
Ответ 1
Не будет ли это сделать это:
function searchFlights() {
var select1 = document.getElementById("airports-select-1");
var selected1 = [];
for (var i = 0; i < select1.length; i++) {
if (select1.options[i].selected) selected1.push(select1.options[i].value);
}
console.log(selected1);
}
function searchFlights() {
var select1 = document.getElementById("airports-select-1");
var selected1 = [];
for (var i = 0; i < select1.length; i++) {
if (select1.options[i].selected) selected1.push(select1.options[i].value);
}
console.log(selected1);
}
<form method="post">
<select name="Select1" multiple="multiple" size="8" id="airports-select-1" onblur="searchFlights()" ;>
<option>aaa</option>
<option>bbb</option>
<option>ccc</option>
<option>ddd</option>
<option>eee</option>
</select>
</form>
Ответ 2
Обновление для 2018 года:
-
Если элемент <select>
содержит свойство selectedOptions
, используйте эту коллекцию. Единственный браузер, все еще широко распространенный, который не поддерживает это, это IE (любая версия). Edge поддерживает это.
-
Если это не поддерживается, ответ @j08691 по-прежнему правильный, но в качестве оптимизации производительности вы можете начать итерацию параметров с selectedIndex
вместо 0
. Это индекс первой выбранной опции или -1
если ничего не выбрано.