2013-05-06 11 views
5

Robiłem trochę pracy z JavaScript kluczowych wydarzeń (keyup, keyDown, przyciśnięcie) i doszli do wniosku, że każdy z nich ma swoje wady i zalety, gdy próbuje określić, jakie klawisze naciśnięty został użytkownik.Przechwytywanie oba klawisze specjalne i kluczową sprawę w imprezach Javascript

Korzystając z wersji event.which dostarczonej przez jQuery, wydaje się, że onkeypress zapewnia kody znaków, w których wielkość liter ma znaczenie. tj. 65-90 dla A-Z i 97-122 dla a-z. Jednak specjalne klawisze, takie jak kierunkowe, nie wyzwalają onkeypress. Będą one jednak uruchamiać keyup/* keydown *, ale te nie będą zapewniały kodów rozróżniania wielkości liter.

Czy istnieje rozwiązanie "najlepsze z obu światów", które zapewni wykrywanie z uwzględnieniem wielkości liter i specjalnych kluczy, które nie wymaga ręcznego monitorowania kilku zdarzeń jednocześnie?

+0

Krótka odpowiedź, nie, musisz posłuchać co najmniej dwóch wydarzeń, aby uzyskać oba. Dłuższą odpowiedzią będzie wysłuchanie zdarzeń zmiany/kontroli i ustalenie na tej podstawie przypadku. – adeneo

+0

możesz szukać e.shiftKey w zdarzeniach typu keydown/up, które będą pisane wielkimi literami. Jedynym problemem jest użycie blokady CAPS, kluczem będzie upperCase, a nie klawisz shiftKey. – dandavis

Odpowiedz

1

Podczas słuchania na razie keyup

$(document).on('keyup', on_key_up); 

function on_key_up(event) 
{ 
    console.log('keycode:',event);  
} 

loguję to:

altKey: false 
bubbles: true 
cancelable: true 
char: undefined 
charCode: 0 
ctrlKey: false 
currentTarget: document 
data: undefined 
delegateTarget: document 
eventPhase: 3 
handleObj: Object 
isDefaultPrevented: function ot(){return!1} 
jQuery19106670567644760013: true 
key: undefined 
keyCode: 69 
metaKey: false 
originalEvent: KeyboardEvent 
relatedTarget: undefined 
shiftKey: false 
target: body 
timeStamp: 1367933052234 
type: "keyup" 
view: Window 
which: 69 

Chcesz keyCode (69 w tym przypadku), shifKey, altKey, ctrlKey. przykład: Jeśli naciśniesz shift + strzałka w prawo, otrzymasz keyCode: 3, shiftKey: true.

function on_key_up(event) 
{ 
if(event.shiftKey) // action 

} 

Mam nadzieję, że to pomoże.

+0

Tak, ale nie ma rozróżnienia między przypadkami liter. W twoim przykładzie nie potrafię odróżnić "e" (kod 69) od "E" (ponownie kod 69), który został wprowadzony z powodu blokady caps, ani "e" z powodu caps caps + shift. – rheone

Powiązane problemy