Ich habe ein <select>
Element mit dem multiple
Attribut. Wie kann ich die ausgewählten Werte dieses Elements mit JavaScript abrufen?
Folgendes versuche ich:
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;
}
javascript
html
drop-down-menu
Tijo K Varghese
quelle
quelle
Antworten:
Keine 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; }
Kurzes Beispiel:
<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>
quelle
var options = select && select.options;
das? In meiner Unerfahrenheit erwartete ich, dass dies sein würdevar options = select.options;
select
ist nicht der beste Variablenname in JavaScript.var options = select && select.options
stellt sicher, dass select nicht undefiniert ist, bevor auf seine Attribute zugegriffen wird.select
nicht definiert ist,getElementById
wird sie zurückkehrennull
. In diesem Fall istoptions
null und fehlerhaft, sobald Sie versuchen, auf die Eigenschaft length zuzugreifen. Aber vielleicht fehlt mir etwas?ES6
[...select.options].filter(option => option.selected).map(option => option.value)
Wo
select
ist ein Verweis auf das<select>
Element.Um es aufzuschlüsseln:
[...select.options]
Nimmt die Array-ähnliche Liste von Optionen und zerstört sie, damit wir Array.prototype-Methoden verwenden können (Bearbeiten: Erwägen Sie auch die Verwendung vonArray.from()
).filter(...)
reduziert die Optionen nur auf die ausgewähltenmap(...)
konvertiert die Rohelemente<option>
in ihre jeweiligen Wertequelle
Hör zu:
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; });
KLICKEN SIE HIER, UM DIE DEMO ZU SEHEN
quelle
Ziemlich das gleiche wie bereits vorgeschlagen, aber ein bisschen anders. Ungefähr so viel Code wie jQuery in Vanilla JS :
selected = Array.prototype.filter.apply( select.options, [ function(o) { return o.selected; } ] );
Es scheint schneller zu sein als eine Schleife in IE, FF und Safari. Ich finde es interessant, dass es in Chrome und Opera langsamer ist.
Ein anderer Ansatz wäre die Verwendung von Selektoren:
selected = Array.prototype.map.apply( select.querySelectorAll('option[selected="selected"]'), [function (o) { return o.value; }] );
quelle
select.selectedOptions
.Angenommen, multiSelect ist das Multiple-Select-Element. Verwenden Sie einfach die Eigenschaft selectedOptions:
//show all selected options in the console: for ( var i = 0; i < multiSelect.selectedOptions.length; i++) { console.log( multiSelect.selectedOptions[i].value); }
quelle
selectedOptions
dies im IE nicht unterstützt wird. developer.mozilla.org/en-US/docs/Web/API/…Hier ist eine ES6- Implementierung:
value = Array(...el.options).reduce((acc, option) => { if (option.selected === true) { acc.push(option.value); } return acc; }, []);
quelle
element.options
eine Live-Sammlung nicht reduziert werden kann. Es muss zuerst in ein Array konvertiert werden, wie in der obigen Antwort gezeigt.Sie können dieses Skript ausprobieren
<!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>
quelle
Sie können
[].reduce
für eine kompaktere Implementierung des RobG-Ansatzes Folgendes verwenden :var getSelectedValues = function(selectElement) { return [].reduce.call(selectElement.options, function(result, option) { if (option.selected) result.push(option.value); return result; }, []); };
quelle
[].filter.call(ele.options, e => e.selected)
Versuchen Sie , basierend auf der Antwort von Rick Viscomi , die Eigenschaft selectedOptions des HTML-Auswahlelements zu verwenden :
let txtSelectedValuesObj = document.getElementById('txtSelectedValues'); [...txtSelectedValuesObj.selectedOptions].map(option => option.value);
Im Detail,
selectedOptions
Gibt eine Liste ausgewählter Elemente zurück....
ist Spread-Syntax . Es erweitert dieHTMLCollection
Elemente des.[...]
ErstelltArray
aus diesen Elementen ein veränderbares Objekt und gibt Ihnen ein Array vonHTMLOptionElements
.map()
Ersetzt jedesHTMLObjectElement
im Array (hier genanntoption
) durch seinen Wert (option.value
).Dicht, aber es scheint zu funktionieren.
Achtung,
selectedOptions
wird vom IE nicht unterstützt !quelle
Überprüfen Sie dies:
HTML:
<select id="test" multiple> <option value="red" selected>Red</option> <option value="rock" selected>Rock</option> <option value="sun">Sun</option> </select>
Einzeiliger Javascript-Code
Array.from(document.getElementById("test").options).filter(option => option.selected).map(option => option.value);
quelle
Wie die vorherige Antwort, jedoch mit underscore.js.
function getSelectValues(select) { return _.map(_.filter(select.options, function(opt) { return opt.selected; }), function(opt) { return opt.value || opt.text; }); }
quelle
Mein Vorlagen-Helfer sieht folgendermaßen aus:
'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 }
quelle
Hier gehts.
const arr = Array.from(el.features.selectedOptions) //get array from selectedOptions property const list = [] arr.forEach(item => list.push(item.value)) //push each item to empty array console.log(list)
quelle
Aufruhr 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>
quelle
Sie können das ausgewählte jquery-Plugin verwenden.
<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>
quelle