¿Cómo fuerzo programáticamente un evento onchange en una entrada?
He intentado algo como esto:
var code = ele.getAttribute('onchange');
eval(code);
Pero mi objetivo final es activar cualquier función de escucha, y eso no parece funcionar. Tampoco lo hace simplemente actualizar el atributo 'valor'.
javascript
Soldarnal
fuente
fuente
var evt = document.createEvent('CustomEvent'); evt.initCustomEvent('input', true, false, { }); elem.dispatchEvent(evt);
En jQuery utilizo principalmente:
fuente
uf, no uses eval para nada . Bueno, hay ciertas cosas, pero son extremadamente raras. Más bien, harías esto:
Busque aquí más opciones: http://jehiah.cz/archive/firing-javascript-events-properly
fuente
new Event(...)
ydispatchEvent
es la solución correcta hoy en día.Element.addEventListener
manejar eventos. Para lograrlo de una manera moderna, consulte la respuesta de @ Miscreant.Por alguna razón, ele.onchange () está lanzando una excepción de "método no encontrado" en IE en mi página, así que terminé usando esta función desde el enlace que Kolten proporcionó y llamando a fireEvent (ele, 'change'), que funcionó :
Sin embargo, creé una página de prueba que confirmó que la llamada debería funcionar con onchange ():
Editar: La razón por la que ele.onchange () no funcionó fue porque en realidad no había declarado nada para el evento onchange. Pero el fireEvent todavía funciona.
fuente
element.dispatchEvent(new Event('change', true, true))
lugar de todo ese arcano y en su mayoría obsoletocreateEvent
yinitEvent
esas cosas.Esta es la respuesta más correcta para IE y Chrome:
fuente
Tomado de la parte inferior de QUnit
Por supuesto, puede reemplazar las cosas $ .browser por sus propios métodos de detección de navegador para hacerlo independiente de jQuery.
Para utilizar esta función:
Esto básicamente activará el evento DOM real como si algo hubiera cambiado.
fuente
Si agrega todos sus eventos con este fragmento de código:
entonces puede usar
element.on<EVENTNAME>()
dónde<EVENTNAME>
está el nombre de su evento, y eso llamará a todos los eventos con<EVENTNAME>
fuente
Para activar cualquier evento en Javascript.
fuente
si estás usando jQuery tendrías:
o MS AJAX:
O en el HTML sin formato del elemento:
Después de volver a leer la pregunta, creo que no leí lo que se debía hacer. Nunca encontré una manera de actualizar un elemento DOM de una manera que fuerce un evento de cambio, lo que mejor puede hacer es tener un método de controlador de eventos separado, como este:
Como ya está escribiendo un método JavaScript que hará el cambio, solo hay 1 línea adicional para llamar.
O, si está utilizando el marco de Microsoft AJAX, puede acceder a todos los controladores de eventos a través de:
Le permitiría hacer algunos trabajos de estilo de reflexión para encontrar el controlador de eventos adecuado para disparar.
fuente
Usando JQuery puede hacer lo siguiente:
fuente