2011-09-16 20 views
5

Actualmente estoy trabajando en una aplicación web que requiere una barra de menú de aplicaciones de escritorio estándar. Empecé a trabajar en la barra de menú y ordené el diseño.

Desafortunadamente, el cliente quiere que las teclas de acceso (como Alt + F) carguen el menú "Archivo". Cuando se presiona la tecla Alt, quiero mostrar las teclas de acceso. Actualmente tengo el siguiente código de jQuery para manejar esto:

$(document).ready(function() { 
    $(this).keydown(function(e) { 
     if(e.keyCode == 18) { alt_shifter = true; $('.access_key').css({ textDecoration: 'underline' }); } 
    }); 

    $(this).keyup(function(e) { 
     if(e.keyCode == 18) { alt_shifter = false; $('.access_key').css({ textDecoration: 'none' }); } 
    }); 
}); 

Por desgracia, como se verá en la jsFiddle, por alguna razón en Google Chrome, al presionar Alt, las teclas están subrayados, a continuación, normalizado en keyup. Sin embargo, presionar Alt nuevamente no hace nada, hasta la próxima vez que se presiona. Es casi como si una vez que se haya hecho el subrayado y se haya disparado keyup, no registra la tecla hasta que no se presione nuevamente.

Aquí está la demostración jsFiddle>http://jsfiddle.net/Ht2wD/

sería recibida con gratitud Cualquier ayuda!

+0

Funciona para mí - el subrayado se enciende y apaga cada vez que se presiona y suelta ALT. Chrome 13.0.782.220 en MacOS 10.7.1 – Alnitak

+0

@Alnitak - Extraño, no funciona para mí en la misma versión exacta de Chrome en Windows 7. –

+0

Parece ser un problema con 13.0.782.220 en Windows. – BenM

Respuesta

5

He alterado el código para incluir e.preventDefault(); justo antes de la verificación del código clave y parecía funcionar. Aquí está la página web que me ayudó a llegar a esa respuesta http://unixpapa.com/js/key.html

+0

Gracias, eso parece haber funcionado. – BenM

2

Aquí está su violín actualización: http://jsfiddle.net/Ht2wD/13/

Este problema precioso se fija mediante la adición de e.preventDefault(). Si tuviera que adivinar, es porque la tecla ALT también es capturada por el navegador y muestra su propio menú resaltado.

$(document).ready(function() { 
    $(this).keydown(function(e) { 
     e.preventDefault(); 
     if(e.keyCode == 18) { alt_shifter = true; $('.access_key').css({ textDecoration: 'underline' }); } 
    }); 

    $(this).keyup(function(e) { 
     e.preventDefault(); 
     if(e.keyCode == 18) { alt_shifter = false; $('.access_key').css({ textDecoration: 'none' }); } 
    }); 
});