Foros del Web » Programando para Internet » Javascript »

Obtener la última opción seleccionada de un select multiple

Estas en el tema de Obtener la última opción seleccionada de un select multiple en el foro de Javascript en Foros del Web. Muy buenas, llevo varios días dándole vueltas a un problema y no consigo dar con ninguna solución. Tengo un formulario con varios select multiples de ...
  #1 (permalink)  
Antiguo 25/04/2014, 10:12
 
Fecha de Ingreso: octubre-2007
Mensajes: 30
Antigüedad: 16 años, 6 meses
Puntos: 0
Obtener la última opción seleccionada de un select multiple

Muy buenas,
llevo varios días dándole vueltas a un problema y no consigo dar con ninguna solución.
Tengo un formulario con varios select multiples de este estilo:

Código HTML:
<select id="talla" name="talla[]" multiple onchange="getLatest('talla')">
  <option value="todo" selected>Todo</option>
  <option value="S">Pequeño</option>
  <option value="M">Mediano</option>
  <option value="L">Grande</option>
</select> 
La idea es que cuando se seleccione alguna de las opciones que no sea "Todo", dichas opciones se vayan acumulando, pero si se vuelve a seleccionar "Todo", automáticamente se quita la selección de todo lo demás y se quede seleccionado únicamente "Todo" como al inicio.

Código:
function getLatest (id) {
	var latest_value = $('#'+id).closest('select').find('option').filter(':selected:last').val();

}
Lo único que se me ocurre es intentar obtener la última opción seleccionada, pero sólo consigo obtener la última opción en posición, no la última "temporalmente" hablando.

Si alguien me puede echar una mano o dar alguna idea os lo agradecería.

Un saludo
  #2 (permalink)  
Antiguo 25/04/2014, 15:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Obtener la última opción seleccionada de un select multiple

Puedes solucionar esto sin necesidad de echar mano de alguna librería.

Código Javascript:
Ver original
  1. var select = document.getElementById("talla"), //El combo
  2.     p = document.getElementsByTagName("p")[0], //Un párrafo en el que mostraré los datos
  3.     valores = []; //El array en el que iré agrupando a los valores que seleccione
  4.  
  5. select.addEventListener("click", function(e){
  6.     var actual = e.target.value,
  7.         posicion = valores.indexOf(actual);
  8.      
  9.     if (actual == "todo" || this.value == "todo"){
  10.         Array.prototype.forEach.call(this.options, function(opcion){
  11.             if (opcion.value != "todo")
  12.                 opcion.selected = false;
  13.         });
  14.         valores.splice(0);
  15.     }
  16.     else
  17.         if (posicion > -1)      
  18.             valores.splice(posicion, 1);
  19.         else
  20.             valores.push(actual);
  21.  
  22.     p.innerHTML = "Valor actual: " + this.value + "<br />";
  23.     p.innerHTML += "Seleccionado: " + actual + "<br >";
  24.     p.innerHTML += "Valores: " + valores;
  25. }, false);

Cada vez que de un clic en el combo, tomo el valor del elemento al que le he dado el clic, en este caso, una de las opciones, además, busco la posición que ocupe el valor seleccionado dentro del array en el que iré albergando a los valores que seleccione. Hago esto para saber si el elemento ya ha sido seleccionado previamente; ya con esta información, puedo realizar otras acciones más adelante.

Si el valor seleccionado o el valor actual del combo es igual a "todo", es decir, a la primera opción, quito la selección a todas las opciones del combo excepto a la que tenga el valor "todo", además, elimino a todos los datos del array, si es que hubieran. Caso contrario, es decir, si selecciono una de las demás opciones, evalúo el valor de la posición obtenida inicialmente. Si esta es mayor a -1, es decir, si el valor que acabo de seleccionar ya existe en el array, lo elimino, caso contrario, lo añado al array.

Finalmente, muestro toda la información recopilada en un párrafo. La ventaja de hacerlo de esta forma, es que ya no es necesario utilizar la tecla Ctrl para seleccionar más de un valor y almacenarlo en el array.

Nota: La evaluación que hago del valor del combo (this.value) es para que cuando inicialmente selecciones un valor utilizando la tecla Ctrl, se cumpla la condición de que si la primera opción del combo se encuentra seleccionada, se eliminen los valores seleccionados del combo.



Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: formulario, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.