2013-05-06 2 views
5

ho fatto un po 'di lavoro con i principali eventi JavaScript (keyup, keydown, pressione di un tasto) e hanno concluso che ognuno ha i propri vantaggi e svantaggi quando cercando di determinare quale chiave (s) l'utente ha premuto.Catturare entrambi i tasti speciali e caso chiave all'interno eventi JavaScript

Utilizzando event.which come previsto da jQuery, sembrerebbe che onkeypress fornisca codici di caratteri sensibili al maiuscolo/minuscolo. cioè 65-90 per A-Z e 97-122 per a-z. Tuttavia, i tasti speciali come quelli direzionali non attivano onkeypress. Tuttavia, attivano una chiave/* keydown , ma non forniranno codici maiuscole e minuscole.

Esiste una soluzione "migliore di entrambi i mondi" che fornisca sia la distinzione tra maiuscole e minuscole che la rilevazione di chiavi speciali che non richiede il monitoraggio simultaneo manuale di più eventi?

+0

Risposta breve, no, devi ascoltare almeno due eventi per ottenere entrambi. La risposta più lunga sarebbe quella di ascoltare gli eventi di turno/controllo e capire il caso in base a ciò. – adeneo

+0

puoi cercare e.shiftKey su eventi keydown/up, che colpiranno le capitali. L'unico problema è quando si utilizza il blocco CAPS, la chiave sarebbe upperCase e non ha shiftKey. – dandavis

risposta

1

Quando si ascolta per l'evento KeyUp

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

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

i log questo:

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 

si desidera che il keyCode (69 in questo caso), shifKey, altKey, ctrlKey. esempio: Se si preme Maiusc + freccia destra, si otterrà keyCode: 3, shiftKey: true.

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

} 

Spero che questo aiuti.

+0

Sì, ma non viene fatta alcuna distinzione tra i casi di lettere. Nel tuo esempio non posso dire la differenza tra una 'e' (codice 69) e una 'E' (ancora codice 69) che è stata immessa a causa del blocco maiuscole, né una 'e' dovuta al blocco maiuscole + maiuscole. – rheone