2012-07-20 9 views
15

tengo el siguiente códigoObtención de los valores seleccionados en una etiqueta de selección múltiple en Javascript

function searchFlights() { 
    var select1 = document.getElementById("airports-select-1"); 
    var selected1 = []; 
    while(select1.selectedIndex != -1) { 
     if(select1.selectedIndex != 0) selected1.push(select1.options[select1.selectedIndex].value); 
     select1.options[select1.selectedIndex].selected = false; 
    } 

    console.log(selected1); 
} 

Esto funciona bien, pero como se puede ver en el código de esta línea:

select1.options[select1.selectedIndex].selected = false; 

está haciendo una deseleccionar el valor.

Ahora, no quiero deseleccionar los valores. Si elimino el comentario de esa línea en el código, el código se ejecutará para siempre.

¿Existe alguna solución más refinada y sofisticada para recuperar múltiples valores de una etiqueta de selección usando Javascript?

Respuesta

37

No sería esto hacerlo:

function searchFlights() { 
    var select1 = document.getElementById("airports-select-1"); 
    var selected1 = []; 
    for (var i = 0; i < select1.length; i++) { 
     if (select1.options[i].selected) selected1.push(select1.options[i].value); 
    } 
    console.log(selected1); 
}​ 

jsFiddle example

+2

Esa es la respuesta. – aurora

0

Actualización para 2018:

  • Si el elemento <select> contiene una propiedad selectedOptions, utilizar esa colección. El único navegador todavía en gran circulación que no es compatible con esto es IE (cualquier versión). Edge lo admite.

  • Si esto no es compatible, la respuesta por @ j08691 sigue siendo correcta, pero como optimización del rendimiento puede comenzar a iterar opciones en selectedIndex en lugar de 0. Este es el índice de la primera opción seleccionada, o -1 si no se selecciona nada.

Cuestiones relacionadas