2013-05-06 6 views
5

Ich habe ein bisschen Arbeit mit Javascript wichtigsten Ereignisse tun (keyup, keydown, keypress) und zu dem Schluss gekommen, dass jede ihre Vor- und Nachteile hat, wenn versuchen zu bestimmen, welche Taste (n) der Benutzer gedrückt hat.Capturing sowohl spezielle Tasten und Tasten Fall innerhalb Javascript Ereignisse

Bei Verwendung von event.which, wie von jQuery zur Verfügung gestellt, scheint es, dass onkeypress Zeichencodes zur Verfügung stellt, die Groß- und Kleinschreibung beachten. d.h. 65-90 für A-Z und 97-122 für a-z. Spezielle Tasten wie die Richtungstaste lösen jedoch keine Taste aus. Sie werden jedoch eine Tastenkombination/* Keydown * auslösen, aber diese werden keine Groß-und Kleinschreibung beachten.

Gibt es eine "Best of Both Worlds" -Lösung, die sowohl Groß- als auch Kleinschreibung erkennt und keine manuelle gleichzeitige Überwachung mehrerer Ereignisse erfordert?

+0

Kurze Antwort, nein, Sie müssen mindestens zwei Ereignisse zu hören, um beides zu bekommen. Die längere Antwort wäre, auf die Schicht-/Kontrollereignisse zu achten und darauf basierend den Fall herauszufinden. – adeneo

+0

können Sie nach e.shiftKey bei Keydown/up-Ereignissen suchen, die Großbuchstaben treffen. Das einzige Problem ist, wenn die CAPS-Sperre verwendet wird, wäre der Schlüssel "upperCase" und nicht "shiftKey". – dandavis

Antwort

1

Wenn für die keyup Ereignis hören

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

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

i log dies:

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 

Sie die keyCode wollen (69 in diesem Fall), shifKey, altKey, ctrlKey. Beispiel: Wenn Sie Shift + Pfeil rechts drücken, erhalten Sie keyCode: 3, shiftKey: true.

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

} 

Hoffe, das hilft.

+0

Ja, aber zwischen den Briefen wird nicht unterschieden. In Ihrem Beispiel kann ich den Unterschied zwischen einem 'e' (Code 69) und einem 'E' (wieder Code 69), die wegen Caps Lock eingegeben wurden, nicht erkennen, noch ein 'e' aufgrund von Caps Lock + Shift. – rheone

0

Sie können versuchen THREEx.KeyboardState.js. Obwohl diese Bibliothek für JS-Spiele verwendet wird, kann sie in Ihrem Fall nützlich sein.