Казалось странным, я не смог найти этот вопрос, но вот он!
У меня есть следующий HTML-код:
<select id="select-meal-type" multiple="multiple">
<option value="1">Breakfast</option>
<option value="2">Lunch</option>
<option value="3">Dinner</option>
<option value="4">Snacks</option>
<option value="5">Dessert</option>
</select>
Как получить все значения (массив?), Выбранные пользователем в javascript?
Например, если пользователь выбрал «Обед и закуски», мне нужен массив из {2, 4}.
Кажется, это должна быть очень простая задача, но я не могу этого сделать.
Спасибо.
javascript
jquery
html
Кайл
источник
источник
Ответы:
Обычный способ:
Из документов :
источник
Если вопрос не касается JQuery, то сначала нужно ответить на этот вопрос в стандартном javascript, поскольку многие люди не используют JQuery на своих сайтах.
From RobG Как получить все выбранные значения из окна множественного выбора с помощью JavaScript? :
источник
selectedOptions
? Разве недостаточно кроссбраузерности?Array.prototype.map.call(el.selectedOptions, function(x){ return x.value })
value
атрибута нет , тоopt.value
=opt.text
.На самом деле, я нашел лучший, самый краткий, быстрый и наиболее совместимый способ использования чистого JavaScript (при условии, что вам не нужно полностью поддерживать IE lte 8):
ОБНОВЛЕНИЕ (2017-02-14):
Еще более лаконичный способ использования ES6 / ES2015 (для браузеров, которые его поддерживают):
источник
Array.from(element.querySelectorAll("option:checked"),e=>e.value);
Array.from(element.selectedOptions).map(v=>v.value);
.checked
Это сработало для меня в раскрывающемся$(".multiple_select > option:checked").each(function(){ console.log(this.value) });
Если вы хотите идти современным путем, вы можете сделать это:
...
Оператор переводит Iterable (HTMLOptionsCollection
) в массив.Если вас просто интересуют значения, вы можете добавить
map()
вызов:источник
Сначала используйте
Array.from
для преобразованияHTMLCollection
объекта в массив.источник
$('#select-meal-type :selected')
будет содержать массив всех выбранных элементов.Взаимодействие с другими людьми
источник
Обновление октябрь 2019 г.
Следующее должно работать автономно во всех современных браузерах без каких-либо зависимостей или транспиляции.
источник
Попробуй это:
Демо
скрипка
источник
если хотите, как вы выразились с перерывами после каждого значения;
источник
Если вам нужно отреагировать на изменения, вы можете попробовать следующее:
[].slice.call(e.target.selectedOptions)
Необходимо потому , чтоe.target.selectedOptions
возвращаетHTMLCollection
, а неArray
. Этот вызов преобразует его в,Array
чтобы затем мы могли применитьmap
функцию, которая извлекает значения.источник
Array.prototype.slice.call(field.querySelectorAll(':checked'))
Я бы выбрал что-то вроде следующего:
Короче говоря, это быстро в современных браузерах, и нам все равно, быстро он или нет в браузерах с долей рынка 1%.
Обратите внимание, что selectedOptions ведет себя нестабильно в некоторых браузерах примерно 5 лет назад, поэтому нюхание пользовательского агента здесь не совсем неприемлемо.
источник
Ты можешь использовать
selectedOptions
источник
Работает везде без jquery:
источник
selectedOptiongs
не поддерживается в IE