Lo que quiero lograr es que cada vez que <select>
se cambie el menú desplegable, quiero el valor del menú desplegable antes de cambiar. Estoy usando la versión 1.3.2 de jQuery y estoy usando un evento de cambio, pero el valor que obtengo allí es después del cambio.
<select name="test">
<option value="stack">Stack</option>
<option value="overflow">Overflow</option>
<option value="my">My</option>
<option value="question">Question</option>
</select>
Digamos que actualmente la opción My está seleccionada ahora cuando la cambio para apilar en el evento onchange (es decir, cuando la cambié a stack) Quiero su valor anterior, es decir, mi esperado en este caso.
¿Cómo se puede lograr esto?
Editar: en mi caso, tengo varios cuadros de selección en la misma página y quiero que se aplique lo mismo a todos ellos. También todos mis selectos se insertan después de cargar la página a través de ajax.
javascript
jquery
jquery-events
Alpesh
fuente
fuente
Respuestas:
Combine el evento de enfoque con el evento de cambio para lograr lo que desea:
Ejemplo de trabajo: http://jsfiddle.net/x5PKf/766
fuente
$(this).blur();
al final de la función de cambiono utilice una var global para esto: almacene el valor anterior en los datos aquí es un ejemplo: http://jsbin.com/uqupu3/2/edit
el código para ref:
acabo de ver que tiene muchas selecciones en la página; este enfoque también funcionará para usted, ya que para cada selección almacenará el valor anterior en los datos de la selección
fuente
jQuery.data
todos modos.select
! La respuesta aceptada se romperá ya que coincide con todas,select
pero solo almacena el valor de la primera.data
Es la mejor manera de hacerlo. +1 :)Voy por la solución de Avi Pinto que usa
jquery.data()
Usar el foco no es una solución válida. Funciona la primera vez que cambia las opciones, pero si permanece en ese elemento de selección y presiona la tecla "arriba" o "abajo". No volverá a pasar por el evento de enfoque nuevamente.
Entonces la solución debería ser más parecida a la siguiente,
fuente
var $selectStatus = $('.my-select'); $selectStatus.on('change', function () { var newStatus = $(this).val(); var oldStatus = $(this).data('pre'); }).data('pre', $selectStatus.val());
$('mySelect').data('pre', $(this).val());
Debería ser como:$('mySelect').each(function() { $(this).data('pre', $(this).val()); });
No tengo suficiente reputación para editar la respuesta: /Rastrea el valor a mano.
fuente
fuente
Estoy usando el evento "live", mi solución es básicamente similar a Dimitiar, pero en lugar de usar "focus", mi valor anterior se almacena cuando se activa "clic".
fuente
mantenga el valor desplegable seleccionado actualmente con jquery elegido en una variable global antes de escribir la función de acción desplegable 'al cambiar'. Si desea establecer el valor anterior en la función, puede usar la variable global.
fuente
¿Qué tal usar un evento jQuery personalizado con una interfaz de tipo de vigilancia angular?
fuente
Sé que este es un hilo viejo, pero pensé que podría agregar un poco más. En mi caso, quería transmitir el texto, val y algunos otros datos. En este caso, es mejor almacenar toda la opción como un valor anterior en lugar de solo el valor.
Código de ejemplo a continuación:
EDITAR:
Olvidé agregar .clone () al elemento. al no hacerlo cuando intentas retirar los valores, terminas obteniendo la nueva copia de la selección en lugar de la anterior. El uso del método clone () almacena una copia de select en lugar de una instancia de este.
fuente
Bueno, ¿por qué no almacena el valor seleccionado actual, y cuando se cambia el elemento seleccionado, se almacenará el valor anterior? (y puede actualizarlo nuevamente como lo desee)
fuente
Use el siguiente código, lo he probado y está funcionando
fuente
fuente
Me gustaría aportar otra opción para resolver este problema; ya que las soluciones propuestas anteriormente no resolvieron mi escenario.
Esto usa jQuery para que def. es una dependencia aquí, pero se puede adaptar para trabajar en javascript puro. (Agregue un oyente al cuerpo, verifique si el objetivo original era una función de selección, ejecución, ...).
Al adjuntar el oyente de cambio al cuerpo, puede estar seguro de que se activará después de oyentes específicos para las selecciones, de lo contrario, el valor de 'data-previous' se sobrescribirá antes de que pueda leerlo.
Por supuesto, esto supone que prefiere utilizar escuchas separadas para su conjunto anterior y su valor de verificación. Encaja perfectamente con el patrón de responsabilidad única.
Nota: Esto agrega esta funcionalidad 'anterior' a todas las selecciones, así que asegúrese de ajustar los selectores si es necesario.
fuente
Esta es una mejora en la respuesta @thisisboris. Agrega un valor actual a los datos, por lo que el código puede controlar cuándo se cambia una variable establecida en el valor actual.
fuente
Mejor solución:
fuente
Hay varias formas de lograr el resultado deseado, esta es mi forma humilde de hacerlo:
Deje que el elemento mantenga su valor anterior, así que agregue un atributo 'previousValue'.
Una vez inicializado, 'previousValue' ahora podría usarse como un atributo. En JS, para acceder al Valor anterior de esta selección:
Una vez que haya terminado de usar 'previousValue', actualice el atributo al valor actual.
fuente
Necesitaba revelar un div diferente basado en la selección
Así es como puedes hacerlo con jquery y sintaxis es6
HTML
JS
fuente