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.

¿Fue útil?

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 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top