Me gustaría que el navegador actúe como si el usuario hubiera presionado la tecla Tab cuando hacían clic en algo. En el controlador de clic que he probado los siguientes enfoques:Simulando una pestaña presionando una tecla usando JavaScript
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
y jQuery:
this.input.focus().trigger({ type : 'keypress', which : 9 });
... que tomé de here.
El primer enfoque parece ser la mejor opción, pero no funciona del todo. Si cambio los dos últimos parámetros a 98, 98, de hecho, se escribe una 'b' en el cuadro de entrada. Sin embargo, 9, 0 y 9, 9 (el primero de los cuales Tomé derecha desde el sitio web MDC) tanto dame estos errores en Firebug bajo FF3:
Permission denied to get property XULElement.popupOpen
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.overrideValue
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to set property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
he oído tales (sin una definición clara de 'tales') eventos son 'no confiables', lo que podría explicar estos errores.
El segundo enfoque causa cualquier valor que puse como evento.que se pase como evento.que, pero sin ningún efecto (incluso si uso 98 en lugar de 9, no se escribe 'b' en el cuadro). Intento establecer event.data en el objeto que estoy pasando, termina indefinido cuando se desencadena el evento. Lo que sigue es el código que estoy usando para ver eso:
$('#hi').keypress(function(e) {
console.log(e);
});
¿Alguna otra idea?
¿Qué desea invocar? ¿Estás tratando de moverlos a la siguiente entrada? – hunter
Sí. Pero la siguiente 'entrada' no es necesariamente un elemento de entrada u otro elemento con tabulación natural. Tampoco es necesariamente antinatural-tabstopped (es decir, $ ("[tabindex]")). Físicamente presionando la pestaña (o Mayús + pestaña) hace exactamente lo que quiero ... – Kev
Gracias por esto. Solo me interesó el primer ejemplo de código de tu pregunta, que realmente me ayudó :) –