Comment obtenir toutes les valeurs sélectionnées à partir de <select multiple=plusieurs>?
Semblait bizarre je ne pouvais pas trouver déjà demandé, mais ici il va!
J'ai un code html comme suit:
<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>
Comment puis-je obtenir toutes les valeurs(un tableau?) que l'utilisateur a sélectionné dans le javascript?
Par exemple, si l'utilisateur a sélectionné le Déjeuner et des Collations, je veux un tableau de { 2, 4 }.
Cela semble comme il devrait être une tâche très simple mais je n'arrive pas à le faire.
Grâce.
- double possible de Obtenir les valeurs à partir des sélections multiples dans SÉLECTIONNEZ
- double possible de Comment obtenir de multiples sélectionnez les valeurs d'une zone à l'aide de jquery?
- Double Possible de Comment obtenir toutes les valeurs sélectionnées d'un multiple de sélectionner la zone à l'aide de JavaScript?
Vous devez vous connecter pour publier un commentaire.
La manière habituelle:
De la docs:
À moins qu'une demande de JQuery, la question doit d'abord être répondu en javascript standard que beaucoup de gens ne pas utiliser JQuery dans leurs sites.
De RobG Comment obtenir toutes les valeurs sélectionnées d'un multiple de sélectionner la zone à l'aide de JavaScript?:
selectedOptions
? N'est-il pas de la croix-navigateur assez?Array.prototype.map.call(el.selectedOptions, function(x){ return x.value })
value
attribut, puisopt.value
=opt.text
.opt.value == 0
? Ne serait pas le résultat alorsopt.text
? Parfois, si la valeur est un identifiant d'objet (peut-être une ForeignKey), la valeur pourrait être légitimement0
.En fait, j'ai trouvé la meilleure, la plus succincte, la plus rapide et la plus compatible à l'aide de JavaScript (en supposant que vous n'avez pas besoin de soutenir pleinement lte IE 8) est la suivante:
Mise à JOUR (2017-02-14):
Encore de manière plus succincte en utilisant ES6/ES2015 (pour les navigateurs qui le supportent):
Array.from(element.querySelectorAll("option:checked"),e=>e.value);
Array.from(element.selectedOptions).map(v=>v.value);
.$('#select-meal-type :selected')
contiendra un tableau de tous les éléments sélectionnés.Tout d'abord, utilisez
Array.from
pour convertir leHTMLCollection
objet d'un tableau.Essayez ceci:
Démo
JS:
HTML:
violon
si vous voulez que vous avez exprimé avec des pauses après chaque valeur;
Si vous avez besoin de répondre à des changements, vous pouvez essayer ceci:
La
[].slice.call(e.target.selectedOptions)
est nécessaire parce quee.target.selectedOptions
renvoie uneHTMLCollection
, pas unArray
. Cet appel convertitArray
de sorte que nous pouvons alors appliquer lemap
fonction, qui extrait les valeurs.Array.prototype.slice.call(field.querySelectorAll(':checked'))
Si vous voulez le faire d'une façon moderne, vous pouvez le faire:
La
...
opérateur de cartes itérable (HTMLOptionsCollection
) de la matrice.Si vous êtes simplement intéressé dans les valeurs, vous pouvez ajouter un
map()
appel:Fonctionne partout sans jquery:
Quelque chose comme ce qui suit est mon choix:
C'est court, c'est rapide sur les navigateurs modernes, et nous ne se soucient pas si c'est rapide ou pas le 1% de part de marché des navigateurs.
Note, selectedOptions a motivé le comportement sur certains navigateurs à partir d'environ 5 ans, donc un agent utilisateur sniff n'est pas totalement hors de la ligne de ici.