2011-09-16 1 views
5

Obecnie pracuję nad aplikacją internetową, która wymaga standardowego paska menu aplikacji pulpitu. Zacząłem pracować na pasku menu i sortowałem układ.

Niestety, klient chce mieć klucze dostępu (takie jak Alt + F) ładuje menu "Plik". Po naciśnięciu klawisza Alt chcę pokazać klawisze dostępu. Obecnie mam następujący kod jQuery do obsługi to:

$(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' }); } 
    }); 
}); 

Niestety, jak zobaczysz na jsFiddle, z jakiegoś powodu w Google Chrome, gdy naciskając klawisz Alt, klawisze są podkreślone, a następnie znormalizowany na keyup. Jednak ponowne naciśnięcie klawisza Alt nic nie robi, dopóki następnym razem nie zostanie naciśnięty. To prawie tak, jakby po wykonaniu podkreślenia i uruchomieniu keyup, nie zarejestruje on kluczowania, dopóki nie zostanie ponownie naciśnięty.

Oto demo jsFiddle>http://jsfiddle.net/Ht2wD/

Każda pomoc będzie najbardziej wdzięcznością otrzymał!

+0

Działa na mnie - podkreślenie włącza się i wyłącza za każdym naciśnięciem i zwolnieniem przycisku ALT. Chrome 13.0.782.220 na MacOS 10.7.1 – Alnitak

+0

@Alnitak - Dziwne, to nie działa dla mnie w tej samej wersji Chrome pod Windows 7. –

+0

Wydaje się być problem z 13.0.782.220 w systemie Windows. – BenM

Odpowiedz

5

Zmieniono kod tak, aby zawierał e.preventDefault(); tuż przed sprawdzeniem keyCode i wydawało się, że działa. Oto strona, która pomogła mi przybyć na tę odpowiedź http://unixpapa.com/js/key.html

+0

Dzięki, to chyba zadziałało. – BenM

2

Oto Twoja aktualizowane Fiddle: http://jsfiddle.net/Ht2wD/13/

Ten piękny problem został rozwiązany przez dodanie e.preventDefault(). Jeśli miałbym zgadywać, to dlatego, że klawisz ALT jest również przechwytywany przez samą przeglądarkę i wyświetla własne podświetlone menu.