¿Cómo puedo activar un evento de cambio manualmente? [duplicar]

Resuelto CodeTweetie asked hace 14 años • 2 respuestas

Estoy configurando un valor de campo de texto de fecha y hora a través de un widget de calendario. Obviamente, el widget de calendario hace algo como esto:

document.getElementById('datetimetext').value = date_value;

Lo que quiero es:
al cambiar el valor en el campo de texto de fecha y hora, necesito restablecer algunos otros campos en la página. Agregué un onchangedetector de eventos al datetimetextcampo que no se activa, porque supongo onchangeque se activa solo cuando el elemento se enfoca y su valor cambia al perder el foco.

Por lo tanto, estoy buscando una manera de activar este onchangeevento manualmente (que supongo que debería encargarse de verificar la diferencia de valor en el campo de texto).

¿Algunas ideas?

CodeTweetie avatar May 18 '10 17:05 CodeTweetie
Aceptado

MDN sugiere que existe una forma mucho más limpia de hacer esto en los navegadores modernos:

// Assuming we're listening for e.g. a 'change' event on `element`

// Create a new 'change' event
var event = new Event('change');

// Dispatch it.
element.dispatchEvent(event);
Milan Iliev avatar May 12 '2014 15:05 Milan Iliev

Hay un par de formas de hacer esto. Si el onchangeoyente es una función establecida a través de la element.onchangepropiedad y no le preocupa el objeto de evento o la propagación/propagación, el método más sencillo es simplemente llamar a esa función:

element.onchange();

Si lo necesita para simular el evento real en su totalidad, o si configura el evento mediante el atributo HTML o addEventListener/ attachEvent, debe realizar un poco de detección de funciones para activar correctamente el evento:

if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    element.dispatchEvent(evt);
}
else
    element.fireEvent("onchange");
Andy E avatar May 18 '2010 11:05 Andy E