¿Cómo se supone que document.createEvent trabajo con eventos clave?
-
30-09-2019 - |
Pregunta
Soy tratando de pulsaciones de teclas de simular en una aplicación web, que es para un sistema embebido pero utiliza un Webkit deriva navegador. He probado el código en Chrome y obtener el mismo error.
He intentado utilizar fragmentos de código de este ejemplo de Yahoo , pero sigo obteniendo el mismo error cuando se dispara el evento usando dispatchEvent. "Objetivo" es un elemento HTML en el árbol DOM.
function fireEvent(target) {
var evt = document.createEvent("UIEvent");
evt.initEvent("keypress", true, true);
target.dispatchEvent(evt);
}
Siempre lanza "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM eventos de excepción 0", he tratado CreateEvent ( "Eventos"), así y siempre se reduce a la misma excepción. Tanto en el sistema embebido y en Chrome.
Solución
Ok, al hacer más pruebas, parecía que cuando todos los parámetros de evento clave fue inicializado correctamente, entonces dispatchEvent trabajó sin fireing una excepción.
Las siguientes obras de código.
function fireEvent(target) {
var evt = document.createEvent("Events");
evt.initEvent("keypress", true, true);
evt.view = window;
evt.altKey = false;
evt.ctrlKey = false;
evt.shiftKey = false;
evt.metaKey = false;
evt.keyCode = 0;
evt.charCode = 'a';
target.dispatchEvent(evt);
}
Otros consejos
Keypress es un UIEvent
. Debe utilizar initUIEvent( 'type', bubbles, cancelable, windowObject, detail )
en lugar de initEvent()
. Pero para Firefox, que implementa un keyEvents
, se debe crear un KeyEvents
y initKeyEvents()
.
Éste es el hilo de edad, sólo para actualizarlo, añado otra respuesta por lo que tiene más sentido para cualquiera.
initEvent () es obsoleta ??strong> Todavía se apoya en algunos navegadores, pero no lo utilice.
Hay una mejor manera concisa para crear eventos como este
function fireEvent(target) {
var event = new Event('build');
// Listen for the event.
target.addEventListener('build', function (e) { ... }, false);
// Dispatch the event.
target.dispatchEvent(event);
}
Para añadir más datos al objeto de evento, existe la interfaz CustomEvent y la propiedad detalle puede ser utilizado para pasar los datos personalizados. Por ejemplo, el evento se ha podido crear la siguiente manera:
var event = new CustomEvent('build', { 'detail': target.dataset.time });
Referencia: Crear y activar eventos