La lógica en el change()
controlador de eventos no se ejecuta cuando se establece el valor val()
, pero se ejecuta cuando el usuario selecciona un valor con el mouse. ¿Por qué es esto?
<select id="single">
<option>Single</option>
<option>Single2</option>
</select>
<script>
$(function() {
$(":input#single").change(function() {
/* Logic here does not execute when val() is used */
});
});
$("#single").val("Single2");
</script>
Creo que puede activar manualmente el evento de cambio con
trigger()
:Aunque no sé por qué no se dispara automáticamente.
fuente
$('#foo').change(function() { $( this ).val( 'whatever' ); });
Agregar este fragmento de código después de val () parece funcionar:
fuente
$(":input#single")
. De hecho, realmente no deberías. Solo encadenarlo después del.val()
. Puedes usar.trigger('change')
o.change()
. Son exactamente lo mismo.Por lo que puedo leer en las API. El evento solo se activa cuando el usuario hace clic en una opción.
http://api.jquery.com/change/
fuente
input
elementos, no cuando el elemento pierde el foco. ¿Tú sabes?Para hacerlo más fácil, agregue una función personalizada y llámela cuando quiera que cambiar el valor también active el cambio
y
O puede anular la función val para llamar siempre al cambio cuando se llama al val
Muestra en http://jsfiddle.net/r60bfkub/
fuente
change
evento sobre un control y está ejecutando una devolución de llamada que (directa o indirectamente) activa nuevamente elchange
evento sobre el mismo control. Le sugiero que use otro nombre para el evento que activa manualmente (por ejemploexplicit.change
), para que no vuelva a activar elchange
evento, evite el bucle y aún le permita reaccionar ante el evento.En caso de que no desee mezclarse con el evento de cambio predeterminado, puede proporcionar su evento personalizado
para activar el evento en el conjunto de valores, puede hacer
fuente
Me encontré con el mismo problema mientras usaba CMB2 con Wordpress y quería conectarme al evento de cambio de un metabox de carga de archivos.
Entonces, en caso de que no pueda modificar el código que invoca el cambio (en este caso, el script CMB2), use el código a continuación. El desencadenante se invoca DESPUÉS de que se establece el valor; de lo contrario, su event event de cambio funcionará, pero el valor será el anterior, no el establecido.
Aquí está el código que uso:
fuente
this.selector
dentro de la$.fn.val
función de anulación , para un selector específico (dependerá de lo que se use para el selector). Este es el mejor que he encontrado para hacer esto sólo para campos específicos, el único problema es que usted debe saber lo que están utilizando para el selectorEsto funcionó para mi guión. Tengo 3 combos y enlaces con el evento chainSelect, necesito pasar 3 valores por url y por defecto seleccionar todo desplegable. Yo usé esto
Y el primer evento funcionó.
fuente
Si acaba de agregar la opción de selección a un formulario y desea activar el evento de cambio, he encontrado que se requiere setTimeout; de lo contrario, jQuery no selecciona el cuadro de selección recién agregado:
fuente