¿Cómo puedo activar un evento de cambio manualmente? [duplicar]
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 onchange
detector de eventos al datetimetext
campo que no se activa, porque supongo onchange
que 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 onchange
evento manualmente (que supongo que debería encargarse de verificar la diferencia de valor en el campo de texto).
¿Algunas ideas?
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);
Hay un par de formas de hacer esto. Si el onchange
oyente es una función establecida a través de la element.onchange
propiedad 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");