Estoy tratando de activar el change
evento en un cuadro de texto cuando cambio su valor con un botón, pero no funciona. Mira este violín .
Si escribe algo en los cuadros de texto y hace clic en otro lugar, change
se activa. Sin embargo, si hace clic en el botón, el valor del cuadro de texto cambia, pero change
no se activa. ¿Por qué?
Respuestas:
onchange
solo se activa cuando el usuario escribe en la entrada y luego la entrada pierde el foco.Puede llamar manualmente al
onchange
evento usando después de configurar el valor:Alternativamente, puede activar el evento usando:
fuente
.change()
al.val()
método..val()
en.change()
porque lo hacen de validación de entrada. Desencadenando.change()
en.val()
provocaría un bucle infinito.blur
lograr algo similar:$('#mytext').focus().val('New text').blur();
De la excelente sugerencia de redsquare, esto funciona muy bien:
fuente
this
:return this.val(v).trigger("change");
Puede anular fácilmente la
val
función para activar el cambio reemplazándola con un proxy de laval
función original .simplemente agregue este código en algún lugar de su documento (después de cargar jQuery)
Un ejemplo de trabajo: aquí
(Tenga en cuenta que esto siempre se activará
change
cuandoval(new_val)
se llame, incluso si el valor no cambió realmente).Si desea activar el cambio SOLO cuando el valor realmente cambió, use este:
Ejemplo en vivo para eso: http://jsfiddle.net/5fSmx/1/
fuente
.val()
..val()
en mente de repente comenzaría a producir efectos secundarios :-p.Necesita encadenar el método de esta manera:
fuente
No, es posible que deba activarlo manualmente después de establecer el valor:
o:
fuente
Parece que los eventos no están burbujeando. Prueba esto:
Espero que esto ayude.
Intenté simplemente un viejo
$("#mytext").trigger('change')
sin guardar el valor anterior, y los.change
incendios incluso si el valor no cambió. Es por eso que guardé el valor anterior y llamé$("#mytext").trigger('change')
solo si cambia.fuente
A partir de febrero de 2019,
.addEventListener()
actualmente no funciona con jQuery.trigger()
o.change()
, puede probarlo a continuación usando Chrome o Firefox.tienes que usar
.dispatchEvent()
en su lugar.fuente
Desde https://api.jquery.com/change/ :
El
change
evento se envía a un elemento cuando su valor cambia. Este evento está limitado a<input>
elementos,<textarea>
cuadros y<select>
elementos. Para cuadros de selección, casillas de verificación y botones de opción, el evento se activa inmediatamente cuando el usuario realiza una selección con el mouse, pero para los otros tipos de elementos, el evento se difiere hasta que el elemento pierde el foco.fuente
Sé que este es un hilo viejo, pero para otros que buscan, las soluciones anteriores tal vez no sean tan buenas como las siguientes, en lugar de verificar
change
eventos, verifique losinput
eventos.fuente