Menentukan apakah JavaScript e.keyCode cetak (non-control) karakter

I'd hanya ingin tahu kisaran(s) dari JavaScript `keyCode yang sesuai dengan typeable karakter; atau alternatif, berbagai non-typeable (kontrol) karakter seperti backspace, melarikan diri, command, shift, dll. jadi aku bisa mengabaikan mereka.

Alasan saya bertanya adalah menelepon String.fromCharCode() ini mengakibatkan karakter aneh untuk tombol kontrol. Misalnya saya mendapatkan "[" untuk meninggalkan perintah, "%" untuk panah kiri. Keanehan seperti itu.

Mengomentari pertanyaan (7)
Larutan

Keydown akan memberikan anda kode kunci ditekan, tanpa modifikasi.

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

Hanya tombol angka, tombol huruf dan spasi akan memiliki keycodes menghubungkan ke String.fromCharCode karena menggunakan nilai-nilai Unicode.

Menekan tombol akan menjadi charCode representasi dari teks yang dimasukkan. Perhatikan bahwa acara ini tidak't api jika tidak ada teks "cetak" sebagai hasil dari penekanan tombol.

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

http://jsfiddle.net/LZs2D/1/ Akan menunjukkan bagaimana ini bekerja.

KeyUp berperilaku demikian pula untuk KeyDown.

Komentar (10)

Hanya untuk latar belakang, "menekan tombol" event akan memberikan anda charCode properti setiap kali anda menekan tombol karakter.

Editor.addEventListener('keypress', function(event){
    if (event.charCode) {
        //// character key
        console.log( String.fromCharCode(event.charCode) ); /// convert charCode to intended character.
    } else {
        //// control key
    }

Namun, "menekan tombol" acara doesn't menangkap setiap keystroke - beberapa tombol api sebelum "menekan tombol" acara.

Sebaliknya, "keydown" acara akan menangkap setiap keystroke, tapi itu doesn't memiliki charCode properti. Jadi bagaimana kita bisa tahu jika itu's karakter utama? Memeriksa setiap stroke kunci apakah keyCode ini dalam batas bawah dan atas untuk beberapa rentang isn't optimal dan efisien. Saya menduga bahwa ada juga masalah untuk karakter luar dari range ASCII.

Pendekatan saya adalah memeriksa panjang dari acara "kunci" properti. "tombol" properti adalah sebuah alternatif untuk "keyCode" untuk menentukan tombol mana yang ditekan. Untuk kontrol kunci, "kunci" properti deskriptif (misalnya "rightArrow", "F12", "kembalikan", dll.). Untuk karakter kunci, "kunci" properti untuk karakter kunci hanya karakter (e.g "a", "A", "~", "\", dll.). Oleh karena itu, untuk setiap karakter kunci, panjang "kunci" properti akan memiliki panjang 1; sedangkan karakter kontrol akan memiliki panjang lebih besar dari 1.

Editor.addEventListener('keydown', function(event){
    if (event.key.length == 1){ 
        //// character key
    } else {
        //// control key
    }
})
Komentar (4)

Artikel ini memiliki daftar keyCodes di `Javascript:

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

Komentar (3)

Anda juga dapat menggunakan RegEx untuk ini:

$(".input").keyup(function (event) {
    if (event.key.match(/^[\d\w]$/i)) {
      // put function to trigger when a digit or a word character is pressed here
    }

aku bendera membuat ekspresi case sensitive.

Komentar (0)

Saya melihat bahwa semua karakter dengan panjang 1 ('A','B',nomor,simbol) dapat dicetak jadi saya hanya menggunakan. Saya menggunakan solusi ini untuk karakter non-inggris juga:

if(e.key.length==1)
    print();
Komentar (0)