teclado tecla para opcion mac funciones expulsar control comandos comando arranque javascript jquery javascript-events keyevent

javascript - para - tecla opcion mac



Cuando se mantiene presionada la tecla CMD, no se activa la tecla clave para ninguna otra tecla (3)

Este es un comportamiento conocido con la tecla meta, y desafortunadamente no hay una solución conocida.

Para su caso, puede considerar implementar el comportamiento predeterminado del navegador ( cómo hacerlo ), luego implementar el comportamiento personalizado que necesita y terminarlo con _e.preventDefault();

Estoy desarrollando una aplicación en la que necesito realizar un procesamiento posterior cuando el usuario presiona CMD + IZQUIERDA en un cuadro de texto en particular. Necesito hacer esto después de la funcionalidad predeterminada del navegador (es decir, después de que lleva a la primera posición en la línea física actual).

El problema es que keyup no se está keyup para la tecla IZQUIERDA (o cualquier otra tecla) mientras la tecla CMD esté presionada.

Intenté esto con las teclas CTRL y MAYÚS y encontré que la activación de la clave se activa como se esperaba para la clave secundaria. Así que si haces CTRL + IZQUIERDA y luego sueltas IZQUIERDA y luego sueltas CTRL, obtienes cuatro eventos en total, 2 pulsaciones de teclas y 2 pulsaciones de teclas. Sin embargo, para la clave de CMD, obtenemos 2 pulsaciones de teclas, pero solo un evento de activación de la clave (el de la clave de CMD cuando lo lanzamos al final).

Intenté esto con la tecla MAYÚS y descubrí que la activación de la clave se activa como se esperaba para la clave secundaria. Entonces, si haces SHIFT + LEFT y luego sueltas IZQUIERDA y luego sueltas SHIFT, obtienes 4 eventos en total, 2 pulsaciones de teclas y 2 pulsaciones de teclas. Sin embargo, para la clave de CMD, obtenemos 2 pulsaciones de teclas, pero solo un evento de activación de la clave (el de la clave de CMD cuando lo lanzamos al final).

¿Qué podría ser? ¿Hay alguna manera de que se keyup activar keyup para la tecla IZQUIERDA (o cualquier tecla) cuando CMD está fuera de servicio?

Estoy probando esto con el último Google Chrome en OSX 10.9.5. El comportamiento es exactamente el mismo en Firefox también. Así que esto no es un problema de Chrome.

Demostración: http://jsfiddle.net/techfoobar/xu0o11nh/4/

Esencialmente:

$(''#mytextbox'') // this gets correctly triggered for the meta key as well as the secondary key // when you press CMD and LEFT in sequence, you get two lines in the console one for // the CMD key and one for the LEFT key .keydown(function(_e) { console.log(''Keydown: '' + _e.keyCode); }) // however, if I release the LEFT key (while keeping the CMD key down) // this does NOT get triggered for the LEFT key .keyup(function(_e) { console.log(''Keyup: '' + _e.keyCode); });


Esto es casi seguro que tiene que ver con las "teclas de acceso rápido" del conjunto del sistema. De acuerdo con la documentación, este evento faltante es un comportamiento esperado también.

Cuando hago espacio en cmd ni siquiera obtengo un evento de reducción de teclado para el espacio cuando aparece la ventana de Spotlight.

En su mención de la tecla ctrl : porque tengo ''espacios'' configurados cuando ctrl izquierda o ctrl derecha no se activan los eventos keydown a la izquierda o derecha, sin embargo ctrl arriba o ctrl hacia abajo al menos dispara sus eventos keydown.

Creo que sería difícil asumir el uso de un sistema que no tenga la configuración de teclas de acceso rápido "predeterminada".


No creas que necesitarás un settimeout.

He cambiado el código para detectar 2 keydowns. Esto puede ser refactorizado más allá de un código más limpio.

http://jsfiddle.net/7nd7hf16/1/

var cmdDown = false; $(''#foo'') .keydown(function(_e) { if(_e.keyCode == 91) cmdDown = true; if(cmdDown && _e.keyCode == 37) console.log(''cmd + left''); console.log(''Keydown: '' + _e.keyCode); }) .keyup(function(_e) { if(_e.keyCode == 91) cmdDown = false; console.log(''Keyup: '' + _e.keyCode); }) .focus();