2012-09-17 7 views
36

Vorrei solo conoscere l'intervallo/i di JavaScript keyCode s che corrispondono a caratteri tipizzabili; o in alternativa, l'intervallo di caratteri (di controllo) non tipografici come backspace, escape, command, shift, ecc. così posso ignorarli.Determinare se JavaScript e.keyCode è un carattere stampabile (non di controllo)

Il motivo che mi chiedo è chiamando String.fromCharCode() si traduce in caratteri dispari per i tasti di controllo. Per esempio ottengo "[" per il comando sinistro, "%" per la freccia sinistra. Stranezze del genere.

+6

Non credi che l'ho cercato su Google? Dai. Hai persino controllato quei risultati o hai semplicemente pensato di essere un idiota? – devios1

+0

La parola che stai cercando è * stampabile *, molto probabilmente. Inoltre, sembra che 'keyCode' sia [sistema e dipendente dall'implementazione] (https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent#Key_values), che si traduce solo in problemi – Alexander

+0

Vuoi dire" stampabile " "? Sicuramente per definizione ogni codice chiave è "tipizzabile" ... – nnnnnn

risposta

71

keyDown vi darà la keyCode del tasto premuto, senza alcuna modifica.

$("#keypresser").keydown(function(e){ 
    var keycode = e.keyCode; 

    var valid = 
     (keycode > 47 && keycode < 58) || // number keys 
     keycode == 32 || keycode == 13 || // spacebar & return key(s) (if you want to allow carriage returns) 
     (keycode > 64 && keycode < 91) || // letter keys 
     (keycode > 95 && keycode < 112) || // numpad keys 
     (keycode > 185 && keycode < 193) || // ;=,-./` (in order) 
     (keycode > 218 && keycode < 223); // [\]' (in order) 

    return valid; 
}); 

Solo i tasti numerici, tasti delle lettere, e la barra spaziatrice dovranno keycodes correlando a String.fromCharCode in quanto utilizza valori Unicode.

Keypress sarà la rappresentazione del codice carattere del testo immesso. Si noti che questo evento non si attiva se nessun testo viene "stampato" come risultato della pressione del tasto.

$("#keypresser").keypress(function(e){ 
    var charcode = e.charCode; 
    var char = String.fromCharCode(charcode); 
    console.log(char); 
}); 

http://jsfiddle.net/LZs2D/1/ Dimostrerà come funzionano.

KeyUp si comporta in modo simile a KeyDown.

+4

Il codice di tabulazione presenta un codice chiave di '9' – Shmiddty

+1

Molti caratteri sono persi, ad es. ',' or '%' –

+0

@AlexanderElgin Comma è lì, keycode 190.% è lo stesso di 5, keycode 52, con il tasto Maiusc premuto. – BobRodes

Problemi correlati