Cela a semblé étrange, je n'ai pas trouvé celui-ci déjà demandé, mais c'est parti!
J'ai un 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 obtenir toutes les valeurs (un tableau?) Que l'utilisateur a sélectionnées en javascript?
Par exemple, si l'utilisateur a sélectionné Déjeuner et collations, je veux un tableau de {2, 4}.
Cela semble être une tâche très simple, mais je n'arrive pas à le faire.
Merci.
javascript
jquery
html
Kyle
la source
la source
Réponses:
La manière habituelle:
À partir de la documentation :
la source
Sauf si une question demande JQuery, la question doit d'abord être répondue en javascript standard car de nombreuses personnes n'utilisent pas JQuery dans leurs sites.
De RobG Comment obtenir toutes les valeurs sélectionnées d'une boîte de sélection multiple en utilisant JavaScript? :
la source
selectedOptions
? N'est-ce pas assez cross-browser?Array.prototype.map.call(el.selectedOptions, function(x){ return x.value })
value
attribut, alorsopt.value
=opt.text
.En fait, j'ai trouvé la meilleure façon, la plus succincte, la plus rapide et la plus compatible d'utiliser du JavaScript pur (en supposant que vous n'ayez pas besoin de prendre entièrement en charge IE lte 8) est la suivante:
MISE À JOUR (2017-02-14):
Une manière encore plus succincte d'utiliser ES6 / ES2015 (pour les navigateurs qui le prennent en charge):
la source
Array.from(element.querySelectorAll("option:checked"),e=>e.value);
Array.from(element.selectedOptions).map(v=>v.value);
.checked
Cela a fonctionné pour moi, sur une liste déroulante à sélection multiple, mais devrait également fonctionner pour toutes les listes déroulantes$(".multiple_select > option:checked").each(function(){ console.log(this.value) });
Si vous voulez opter pour la voie moderne, vous pouvez le faire:
L'
...
opérateur mappe iterable (HTMLOptionsCollection
) au tableau.Si vous êtes simplement intéressé par les valeurs, vous pouvez ajouter un
map()
appel:la source
Tout d'abord, utilisez
Array.from
pour convertir l'HTMLCollection
objet en tableau.la source
$('#select-meal-type :selected')
contiendra un tableau de tous les éléments sélectionnés.
la source
Mise à jour octobre 2019
Ce qui suit devrait fonctionner "autonome" sur tous les navigateurs modernes sans aucune dépendance ni transpilation.
la source
Essaye ça:
Démo
violon
la source
si vous voulez comme vous l'avez exprimé avec des pauses après chaque valeur;
la source
Si vous avez besoin de répondre aux modifications, vous pouvez essayer ceci:
Le
[].slice.call(e.target.selectedOptions)
est nécessaire care.target.selectedOptions
renvoie aHTMLCollection
, pas unArray
. Cet appel le convertit enArray
afin que nous puissions ensuite appliquer lamap
fonction, qui extrait les valeurs.la source
Array.prototype.slice.call(field.querySelectorAll(':checked'))
Quelque chose comme ce qui suit serait mon choix:
C'est court, c'est rapide sur les navigateurs modernes, et nous ne nous soucions pas de savoir si c'est rapide ou non sur les navigateurs à 1% de part de marché.
Notez que selectedOptions a un comportement bancal sur certains navigateurs il y a environ 5 ans, donc un sniff d'agent utilisateur n'est pas totalement hors de propos ici.
la source
Vous pouvez utiliser
selectedOptions
la source
Fonctionne partout sans jquery:
la source
selectedOptiongs
n'est pas pris en charge dans IE