Inilah yang saya miliki sekarang:
$("input").bind("keydown",function(e){
var value = this.value + String.fromCharCode(e.keyCode);
}
Jika e.keyCode
tidak mungkin karakter ASCII ( Alt, backspace, del, arrows., Dll) ... Saya akan sekarang perlu untuk trim
nilai-nilai ini dari value
entah bagaimana (sebaiknya pemrograman - tidak dengan tabel lookup).
Saya menggunakan jQuery.
Saya harus menggunakan keydown
acara tersebut. keyPress
tidak mengaktifkan untuk kunci tertentu saya harus capture ( Esc, del, backspace, dll).
Saya tidak bisa menggunakan setTimeout
untuk mendapatkan nilai input. setTimeout(function(){},0)
terlalu lambat.
javascript
jquery
special-characters
keycode
David Murdoch
sumber
sumber
keydown
untuk mengambil kode karakter? Anda berada dalam perjalanan yang sulit: quirksmode.org/js/keys.html (petunjuk: gunakankeypress
!! )document.onkeydown = function(e){ console.log('Key: ' + e.key); }
Jawaban:
Mungkin saya tidak mengerti pertanyaan dengan benar, tetapi tidak bisakah Anda menggunakan
keyup
jika Anda ingin menangkap kedua input?sumber
Dalam pengalaman saya
String.fromCharCode(e.keyCode)
tidak bisa diandalkan.String.fromCharCode
mengharapkan kode kode unicode sebagai argumen;e.keyCode
mengembalikan kode kunci javascript. Kode kunci Javascript dan kode unicode bukan hal yang sama! Secara khusus, tombol-tombol angka mengembalikan berbedakeycode
dari tombol-tombol angka biasa (karena mereka adalah kunci yang berbeda) sementara yang samakeycode
dikembalikan untuk keduanyaupper
danlowercase
huruf (Anda menekan tombol yang sama dalam kedua kasus), meskipun mereka memiliki berbedacharcodes
.Misalnya, tombol angka 1 biasa menghasilkan suatu peristiwa dengan
keycode
49 sementara tombol angka 1 (dengan Numlockon) menghasilkankeycode
97. Digunakan denganString.fromCharCode
kita mendapatkan yang berikut:String.fromCharCode
mengharapkan kode sandi unicode, bukan kode kunci javascript. Kunci tersebut amenghasilkan suatu peristiwa dengankeycode
65, independen dari kasus karakter yang akan dihasilkan (ada juga pengubah untuk jika Shifttombol ditekan, dll. Dalam acara tersebut). Karakter amemilikicharcode
kode unicode 61 sedangkan karakter Amemiliki kodecharcode
41 (sesuai dengan, misalnya, http://www.utf8-chartable.de/ ). Namun, itu adalahhex
nilai, yang dikonversi ke desimal memberi kita nilaicharcode
65 untuk "A" dan 97 untuk "a". [1] Ini konsisten dengan apa yang kami dapatkan dariString.fromCharCode
nilai-nilai ini.Persyaratan saya sendiri terbatas pada pemrosesan angka dan huruf biasa (menerima atau menolak tergantung pada posisi dalam string) dan membiarkan karakter kontrol ( F-keys, -something Ctrl) melalui. Dengan demikian saya dapat memeriksa karakter kontrol, jika itu bukan karakter kontrol saya memeriksa terhadap suatu rentang dan hanya kemudian saya perlu mendapatkan karakter yang sebenarnya. Mengingat saya tidak khawatir tentang kasus (saya mengubah semua huruf menjadi huruf besar) dan telah membatasi jangkauan kode kunci, saya hanya perlu khawatir tentang tombol angka pad. Berikut ini cukup untuk itu:
Secara umum, fungsi untuk mengembalikan karakter dari andal
charcode
akan sangat bagus (mungkin sebagai plugin jQuery), tapi saya tidak punya waktu untuk menulisnya sekarang. Maaf.Saya juga menyebutkan
e.which
(jika Anda menggunakan jQuery) yang menjadi normale.keyCode
dane.charCode
, sehingga Anda tidak perlu khawatir tentang jenis tombol apa yang ditekan. Masalah dengan menggabungkannya denganString.fromCharCode
sisa - sisa.[1] Saya bingung sebentar -. semua dokumen mengatakan bahwa
String.fromCharCode
mengharapkan unicodecharcode
, sementara dalam praktiknya tampaknya berfungsi untuk kode karakter ASCII, tapi itu saya pikir karena kebutuhan untuk mengkonversi ke desimal dari hex, dikombinasikan dengan fakta bahwa kode ASCII dan kode unimal decode tumpang tindih untuk biasa huruf latin.sumber
keyCode
adalah untuk mengetahui tombol apa yang ditekan, bukan untuk mengetahui karakter apa yang digunakan. Misalnya, "U" pada keyboard Dvorak memiliki kode kunci yang sama dengan "F" pada keyboard QWERTY atau "ㄹ" pada keyboard Korea dll. Intinya bukan untuk mengubahnya menjadi karakter, itu ada di sana sehingga Anda dapat dengan mudah memetakan hal-hal ke posisi keyboard.Nama kunci yang dapat dibaca yang diindeks oleh kode kunci
Ada kode kunci yang relatif sedikit jadi saya hanya mendaftar semua nilai yang sesuai dalam array statis sehingga saya bisa dengan mudah mengkonversi angka
65
menjadiA
menggunakankeyboardMap[65]
Tidak semua kode kunci memetakan ke karakter yang dapat dicetak sehingga beberapa string yang dapat diidentifikasi lainnya dikembalikan.
Anda mungkin perlu memodifikasi array yang sesuai dengan kebutuhan Anda dan cukup mengembalikan string kosong untuk semua karakter yang tidak ingin Anda terjemahkan. Array berikut memungkinkan saya untuk dengan cepat dan andal menentukan tombol mana yang ditekan di lingkungan apa pun. Nikmati!
Coba cuplikan kode berikut menggunakan pendekatan pencarian array statis ini ...
Tampilkan cuplikan kode
Kode kunci yang perlu diperhatikan
Surat AZ: (65-90)
Digit 0-9: (48-57)
Angka Pad 0-9: (96-105)
Tombol Panah: (37-40)
Kunci Tab: (9)
Enter Key: (13)
Kunci bilah spasi: (32)
OS Specific Key (91) Windows Key (Windows) atau Command Key (Mac)
Tombol Alt: (18)
Kunci Kontrol: (17)
Tombol Shift: (16)
Caps Lock Key: (20)
sumber
Hanya sebuah catatan penting: jawaban yang diterima di atas tidak akan berfungsi dengan benar untuk keyCode> = 144, yaitu titik, koma, tanda hubung, dll. Bagi mereka Anda harus menggunakan algoritma yang lebih umum:
Jika Anda penasaran mengapa, ini tampaknya perlu karena perilaku fungsi JS bawaan
String.fromCharCode()
. Untuk nilai-nilaikeyCode <= 96
itu tampaknya memetakan menggunakan fungsi:chrCode = keyCode - 48 * Math.floor(keyCode / 48)
Untuk nilai-nilai
keyCode > 96
itu tampaknya memetakan menggunakan fungsi:chrCode = keyCode
Jika ini kelihatan seperti perilaku aneh maka saya setuju. Sedihnya, itu akan sangat jauh dari hal paling aneh yang pernah saya lihat di inti JS.
sumber
let
jawaban atas pertanyaan mulai 2009. :-)let
maka saya membantu mereka ;-)Saya berasumsi ini untuk permainan atau untuk jenis aplikasi yang merespons cepat maka penggunaan KEYDOWN daripada KEYPRESS.
Sunting : Sial! Saya berdiri dikoreksi (terima kasih Crescent Fresh dan David): JQuery (atau bahkan lebih tepatnya host DOM yang mendasari) tidak mengekspos detail WM_KEYDOWN dan acara lainnya. Alih-alih mereka mencerna data ini dan, dalam kasus keyDown bahkan di JQuery, kita mendapatkan:
Perhatikan bahwa properti ini adalah nilai UniCode.
Catatan, saya tidak dapat menemukan referensi otoritatif untuk itu dalam dokumen JQuery, tetapi banyak contoh terkemuka di internet merujuk ke dua properti ini.
Kode berikut, diadaptasi dari beberapa java (bukan javascript) milik saya, karena itu sama sekali salah ...
Berikut ini akan memberi Anda bagian-bagian kode kunci yang "menarik":
sumber
keydown
atau tidak).Saya tahu ini adalah pertanyaan lama, tetapi saya menemukan hari ini mencari solusi yang sudah dikemas untuk masalah ini, dan tidak menemukan apa pun yang benar-benar memenuhi kebutuhan saya.
Berikut ini adalah solusi (hanya bahasa Inggris) yang mendukung Huruf Besar (bergeser), Huruf Kecil, tanda baca, papan tombol angka, dll.
Hal ini juga memungkinkan untuk identifikasi sederhana dan mudah ke depan - dan reaksi terhadap - kunci yang tidak dapat dicetak, seperti ESC, Arrows, Tombol fungsi, dll.
https://jsfiddle.net/5hhu896g/1/
Terima kasih kepada DaveAlger karena telah menyelamatkan saya mengetik - dan banyak penemuan! - dengan memberikan Named Key Array.
sumber
Saya baru-baru menulis sebuah modul yang disebut keysight yang menerjemahkan
keypress
,keydown
dankeyup
peristiwa menjadi karakter dan kunci masing-masing.Contoh:
sumber
Bagi Anda yang datang ke sini mencari nilai karakter Unicode aktual untuk kode kunci, seperti yang saya lakukan, berikut adalah fungsi untuk itu. Misalnya, mengingat panah kanan unicode keycode ini akan menampilkan string yang terlihat
\u001B\u005B\u0043
sumber
Anda juga dapat menggunakan properti read-only
key
. Itu juga menghormati kunci khusus seperti shiftdll dan didukung oleh IE9.Ketika karakter yang tidak dapat dicetak atau karakter khusus ditekan, nilainya akan berada pada nilai kunci yang ditentukan seperti
'Shift'
atau'Multiply'
.event.key
'x'
'X'
'F5'
sumber
Lihat tautan ini Dapatkan Kode Kunci dari tombol tekan dan nilai karakter untuk kode kunci apa pun
sumber