Parecía extraño que no pudiera encontrar este ya preguntado, ¡pero aquí va!
Tengo un html de la siguiente manera:
<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>
¿Cómo obtengo todos los valores (¿una matriz?) Que el usuario ha seleccionado en javascript?
Por ejemplo, si el usuario ha seleccionado Almuerzo y bocadillos, quiero una matriz de {2, 4}.
Esto parece que debería ser una tarea muy simple, pero parece que no puedo hacerlo.
Gracias.
javascript
jquery
html
Kyle
fuente
fuente
Respuestas:
La forma habitual:
De los documentos :
fuente
A menos que una pregunta solicite JQuery, la pregunta debe responderse primero en javascript estándar, ya que muchas personas no usan JQuery en sus sitios.
De RobG ¿Cómo obtener todos los valores seleccionados de un cuadro de selección múltiple usando JavaScript? :
fuente
selectedOptions
? ¿No es suficiente para varios navegadores?Array.prototype.map.call(el.selectedOptions, function(x){ return x.value })
value
atributo, entoncesopt.value
=opt.text
.En realidad, encontré que la mejor, más sucinta, rápida y más compatible forma usando JavaScript puro (asumiendo que no necesitas ser totalmente compatible con IE lte 8) es la siguiente:
ACTUALIZACIÓN (2017-02-14):
Una forma aún más sucinta usando ES6 / ES2015 (para los navegadores que lo admiten):
fuente
Array.from(element.querySelectorAll("option:checked"),e=>e.value);
Array.from(element.selectedOptions).map(v=>v.value);
.checked
Esto funcionó para mí, en un menú desplegable de selección múltiple, pero también debería funcionar para todos los menús desplegables$(".multiple_select > option:checked").each(function(){ console.log(this.value) });
Si quieres seguir el camino moderno, puedes hacer esto:
El
...
operador mapea iterable (HTMLOptionsCollection
) a la matriz.Si solo está interesado en los valores, puede agregar una
map()
llamada:fuente
Primero, use
Array.from
para convertir elHTMLCollection
objeto en una matriz.fuente
$('#select-meal-type :selected')
contendrá una matriz de todos los elementos seleccionados.
fuente
Actualización de octubre de 2019
Lo siguiente debería funcionar de forma "independiente" en todos los navegadores modernos sin dependencias ni transpilación.
fuente
Prueba esto:
Manifestación
violín
fuente
si lo desea como expresó con descansos después de cada valor;
fuente
Si necesita responder a los cambios, puede intentar esto:
El
[].slice.call(e.target.selectedOptions)
es necesario porquee.target.selectedOptions
devuelve unHTMLCollection
, no unArray
. Esa llamada lo convierte paraArray
que luego podamos aplicar lamap
función, que extrae los valores.fuente
Array.prototype.slice.call(field.querySelectorAll(':checked'))
Algo como lo siguiente sería mi elección:
Es breve, es rápido en los navegadores modernos y no nos importa si es rápido o no en los navegadores con una participación de mercado del 1%.
Tenga en cuenta que selectedOptions tiene un comportamiento inestable en algunos navegadores desde hace unos 5 años, por lo que un rastreo de agente de usuario no está totalmente fuera de lugar aquí.
fuente
Puedes usar
selectedOptions
fuente
Funciona en todas partes sin jquery:
fuente
selectedOptiongs
no es compatible con IE