2010-04-22 16 views
5

He notado un problema al intentar capturar el atajo de teclado: CTRL + una flecha.¿Cómo manejar ctrl + flecha en Javascript?

He manejado el evento de selección. Ahora cuando tengo tecla CTRL, el evento de tecla se activa una vez. Si sostengo una flecha (de modo que ahora estoy sosteniendo CTRL + una flecha) no enciende otro evento. ¿Está prohibido por alguna razón? Supongo que ya me encontré con este problema en Opera hace unos años y que tenía una opción en el navegador.

Mis resultados:

  • sostienen CTRL, pulse la flecha - caso de incendios CTRL y no se dispara un evento de una flecha

  • prensa CTRL + una flecha a la vez - dispara un evento pero solo con el código clave de CTRL.

  • sosteniendo CTRL, presione una letra (por ejemplo S.) - funciona como se espera

  • prensa CTRL + letra (por ejemplo S.) - funciona como se espera

(Los resultados son idénticos en Chrome y Firefox. ¿Es el comportamiento descrito anteriormente un estándar?)

estoy usando:

  • function OnKeyDown(e) { }
  • e.ctrlKey, e.which propiedades del evento

La pregunta es: ¿cuál podría ser el problema?

Respuesta

10

Usted debe verificar si la bandera event.ctrlKey es cierto, algo como esto:

document.getElementById('element').onkeydown = function (e) { 
    e = e || window.event; 
    var keyCode = e.keyCode || e.which, 
     arrow = {left: 37, up: 38, right: 39, down: 40 }; 

    if (e.ctrlKey) { 
    switch (keyCode) { 
     case arrow.left: 
     //... handle Ctrl-LeftArrow 
     break; 
     //... 
    } 
    } 
}; 

Comprobar un ejemplo here.

+0

Estoy comprobando event.ctrlKey. Lo escribí en mi pregunta. Probé tu código: http://pastebin.org/168399 - y no funciona - tal vez algo esté mal en mi teclado. –

+0

Publiqué el código para pegar porque no sé cómo más responderé a tu respuesta con un código tan largo (el comentario es demasiado corto, agregando el código como respuesta es algo grosero, agregando que el código de la pregunta no es sistemático)) * CONFUNDIDO * –

+0

Estoy jugando [aquí] (http://jsbin.com/ojaki3) con el código que ha publicado, y funciona correctamente, si * LeftArrow * (sin Ctrl) se presiona alets "gosh", si * Ctrl * - * LeftArrow *, alerta "heureka" ... – CMS

Cuestiones relacionadas