Как получить все выбранные значения в поле множественного выбора?
у меня есть <select>
с элементом . Как я могу получить выбранные значения этого элемента с помощью JavaScript?
вот что я пытаюсь:
function loopSelected() {
var txtSelectedValuesObj = document.getElementById('txtSelectedValues');
var selectedArray = new Array();
var selObj = document.getElementById('slct');
var i;
var count = 0;
for (i=0; i<selObj.options.length; i++) {
if (selObj.options[i].selected) {
selectedArray[count] = selObj.options[i].value;
count++;
}
}
txtSelectedValuesObj.value = selectedArray;
}
13 ответов:
нет jQuery:
// Return an array of the selected opion values // select is an HTML select element function getSelectValues(select) { var result = []; var options = select && select.options; var opt; for (var i=0, iLen=options.length; i<iLen; i++) { opt = options[i]; if (opt.selected) { result.push(opt.value || opt.text); } } return result; }
пример:
<select multiple> <option>opt 1 text <option value="opt 2 value">opt 2 text </select> <button onclick=" var el = document.getElementsByTagName('select')[0]; alert(getSelectValues(el)); ">Show selected values</button>
Регистрация-это:
HTML:
<a id="aSelect" href="#">Select</a> <br /> <asp:ListBox ID="lstSelect" runat="server" SelectionMode="Multiple" Width="100px"> <asp:ListItem Text="Raj" Value="1"></asp:ListItem> <asp:ListItem Text="Karan" Value="2"></asp:ListItem> <asp:ListItem Text="Riya" Value="3"></asp:ListItem> <asp:ListItem Text="Aman" Value="4"></asp:ListItem> <asp:ListItem Text="Tom" Value="5"></asp:ListItem> </asp:ListBox>
JQUERY:
$("#aSelect").click(function(){ var selectedValues = []; $("#lstSelect :selected").each(function(){ selectedValues.push($(this).val()); }); alert(selectedValues); return false; });
ES6
[...select.options].filter(option => option.selected).map(option => option.value)
здесь
select
ссылка на<select>
элемент.чтобы разбить его:
[...select.options]
принимает массив-подобный список опций и разрушает его, чтобы мы могли использовать массив.методы прототипа на нем (Edit: также рассмотрите возможность использованияArray.from()
)filter(...)
уменьшает параметры только до тех, которые выбраныmap(...)
преобразует raw<option>
элементы в их соответствующие значения
почти так же, как уже предлагалось, но немного разные. Примерно столько же кода, сколько jQuery в Vanilla JS:
selected = Array.prototype.filter.apply( select.options, [ function(o) { return o.selected; } ] );
Это кажется, быстрее чем цикл в IE, FF и Safari. Мне интересно, что это медленнее в Chrome и Opera.
другой подход будет использовать селекторы:
selected = Array.prototype.map.apply( select.querySelectorAll('option[selected="selected"]'), [function (o) { return o.value; }] );
предположим, что multiSelect является элементом множественного выбора, просто используйте его свойство selectedOptions:
//show all selected options in the console: for ( var i = 0; i < multiSelect.selectedOptions.length; i++) { console.log( multiSelect.selectedOptions[i].value); }
здесь ES6 реализация:
value = Array(...el.options).reduce((acc, option) => { if (option.selected === true) { acc.push(option.value); } return acc; }, []);
вы можете попробовать этот скрипт
<!DOCTYPE html> <html> <script> function getMultipleSelectedValue() { var x=document.getElementById("alpha"); for (var i = 0; i < x.options.length; i++) { if(x.options[i].selected ==true){ alert(x.options[i].value); } } } </script> </head> <body> <select multiple="multiple" id="alpha"> <option value="a">A</option> <option value="b">B</option> <option value="c">C</option> <option value="d">D</option> </select> <input type="button" value="Submit" onclick="getMultipleSelectedValue()"/> </body> </html>
можно использовать
[].reduce
для более компактной реализации RobG по:var getSelectedValues = function(selectElement) { return [].reduce.call(selectElement.options, function(result, option) { if (option.selected) result.push(option.value); return result; }, []); };
то же, что и предыдущий ответ, но с использованием подчеркивания.js.
function getSelectValues(select) { return _.map(_.filter(select.options, function(opt) { return opt.selected; }), function(opt) { return opt.value || opt.text; }); }
мой помощник по шаблону выглядит так:
'submit #update': function(event) { event.preventDefault(); var obj_opts = event.target.tags.selectedOptions; //returns HTMLCollection var array_opts = Object.values(obj_opts); //convert to array var stray = array_opts.map((o)=> o.text ); //to filter your bits: text, value or selected //do stuff }
Riot JS code
this.GetOpt=()=>{ let opt=this.refs.ni; this.logger.debug("Options length "+opt.options.length); for(let i=0;i<=opt.options.length;i++) { if(opt.options[i].selected==true) this.logger.debug(opt.options[i].value); } }; //**ni** is a name of HTML select option element as follows //**HTML code** <select multiple ref="ni"> <option value="">---Select---</option> <option value="Option1 ">Gaming</option> <option value="Option2">Photoshoot</option> </select>
вы можете использовать выбранный плагин jQuery .
<head> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/chosen/1.4.2/chosen.min.css" <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/chosen/1.4.2/chosen.jquery.min.js"></script> <script> jQuery(document).ready(function(){ jQuery(".chosen").data("placeholder","Select Frameworks...").chosen(); }); </script> </head> <body> <label for="Test" class="col-md-3 control label">Test</label> <select class="chosen" style="width:350px" multiple="true"> <option>Choose...</option> <option>Java</option> <option>C++</option> <option>Python</option> </select> </body>
дом на Рик Viscomiответ, попробуйте использовать HTML Select элемент selectedOptions свойства:
let txtSelectedValuesObj = document.getElementById('txtSelectedValues'); [...txtSelectedValuesObj.selectedOptions].map(option => option.value);
подробно
selectedOptions
возвращает список выбранных элементов.- в частности, он возвращает только для чтения HTMLCollection содержащих HTMLOptionElements.
...
и распространение синтаксис. Он расширяетHTMLCollection
' s элементы.[...]
создает изменчивуюArray
объект из этих элементов, давая вам массивHTMLOptionElements
.map()
заменяет каждый элементHTMLObjectElement
в массиве (здесь называетсяoption
) С стоимостью (option.value
).плотный, но это, кажется, работает.
Берегись,
selectedOptions
не поддерживается в IE!