Pencari Keycode JavaScript

Tekan tombol apa pun di keyboard Anda untuk melihat properti event JavaScript-nya.

Tekan tombol…

Sejarah 30 tahun event keyboard di JavaScript

Belum ada tombol yang ditekan

Cara kerjanya

  1. Tekan tombol: klik di area input dan tekan tombol apa pun, huruf, angka, tombol fungsi, panah, modifikator, atau tombol khusus.
  2. Baca kode tombol: alat seketika menampilkan nilai event.key, event.code, event.keyCode (warisan), dan charCode tombol.
  3. Gunakan dalam kode Anda: salin nilai persis yang dibutuhkan untuk listener event keyboard atau implementasi shortcut Anda.

Mengapa menggunakan pencari keycode?

Event keyboard JavaScript mengekspos beberapa properti berbeda, key, code, keyCode, charCode, dan which, dan mengetahui mana yang harus digunakan dan dibandingkan dengan nilai apa selalu rumit. Pencari KeyCode menghilangkan dugaan dengan memungkinkan Anda menekan tombol dan segera melihat semua properti event-nya. Berharga untuk membangun shortcut keyboard, menangani tombol khusus, mengimplementasikan hotkey, dan men-debug listener event keyboard.

Fitur

Pertanyaan umum

Apa perbedaan antara event.key dan event.keyCode?

event.key adalah standar modern, mengembalikan string yang dapat dibaca seperti "ArrowLeft" atau "Enter". event.keyCode adalah kode numerik warisan (sudah usang tetapi masih didukung). Gunakan event.key untuk kode baru; event.keyCode untuk mempertahankan kompatibilitas dengan browser lama.

Bagaimana cara mendeteksi Ctrl+S atau kombinasi tombol lainnya?

Kombinasi keyboard menggunakan event.key dikombinasikan dengan pemeriksaan modifikator: if (event.ctrlKey && event.key === "s"). Tekan Ctrl+S di alat ini untuk melihat semua nilai, lalu reproduksi kondisi yang sama di listener event Anda.

Mengapa beberapa tombol menampilkan keyCode yang sama?

Nilai keyCode tidak dinormalisasi dan beberapa tombol berbagi kode tergantung konteks. event.code lebih andal, mengidentifikasi posisi fisik tombol (mis. "KeyA") terlepas dari layout keyboard, sedangkan event.key mencerminkan karakter yang dihasilkan oleh tombol tersebut.

Sejarah 30 tahun event keyboard di JavaScript

Event keyboard memiliki sejarah yang terkenal kacau di DOM. Netscape Navigator 2 (1995) memperkenalkan handler asli onkeydown, onkeypress, dan onkeyup dengan properti numerik keyCode, yang tidak memiliki spesifikasi; setiap browser menemukan nilainya sendiri. Internet Explorer 4 (1997) mengimplementasikan variannya sendiri dengan event.keyCode sebagai satu-satunya properti, sementara Netscape tetap dengan event.which. DOM Level 2 Events (W3C, November 2000) menstandardisasi aliran event (capture/bubble) tetapi secara eksplisit menyingkirkan event keyboard karena vendor tidak dapat sepakat. Hasilnya: pengembang menulis kode seperti e.keyCode || e.which selama lebih dari satu dekade. DOM Level 3 Events (W3C Working Draft 2003, Rekomendasi 2018) akhirnya memperkenalkan modern event.key (karakter Unicode atau tombol bernama seperti «ArrowLeft») dan event.code (posisi tombol fisik seperti «KeyA», independen dari layout), bersama dengan men-deprecate keyCode, charCode, dan which. Spesifikasi UI Events (W3C, berlangsung) adalah rumah modern untuk pekerjaan ini. Browser menyusul secara bertahap: Chrome 51 (Mei 2016), Firefox 47 (Juni 2016), Safari 10.1 (Maret 2017) semua mengirimkan dukungan event.code. Event legacy keypress di-deprecate untuk event beforeinput dan input.

5 properti, didekode

Di mana pencarian keycode benar-benar penting

Kesalahan umum dalam menangani event keyboard

Pertanyaan yang lebih sering diajukan

Mengapa handler tombol saya tidak terpicu ketika pengguna memiliki keyboard non-US?

Hampir selalu karena Anda memeriksa event.key untuk karakter yang hanya ada dengan Shift pada layout itu. Pada keyboard Jerman QWERTZ, «/» adalah Shift+7 (bukan tombolnya sendiri); pada AZERTY Prancis, digit 0-9 diketik dengan Shift+baris-atas. Gunakan event.code (tombol fisik) untuk shortcut berbasis posisi, atau event.key untuk shortcut berbasis konten (di mana Anda benar-benar menginginkan karakter yang baru saja diketik pengguna).

Bagaimana saya menangani Cmd+K / Ctrl+K secara konsisten di seluruh platform?

Idiom standar: if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); openPalette(); }. Di macOS, e.metaKey adalah tombol Cmd; di Windows/Linux, e.ctrlKey adalah yang diharapkan pengguna. Terima keduanya. Selalu preventDefault karena browser mengikat Cmd+K ke «fokus bilah alamat» di beberapa browser. Tambahkan !e.repeat untuk menghindari pemicuan pada tahan-tombol.

Bisakah JavaScript mendeteksi penekanan tombol global di luar halaman?

Tidak, dan ini berdasarkan desain untuk keamanan. Browser hanya memicu event keyboard untuk halaman atau elemen yang difokuskan. Ekstensi browser dapat mendengarkan dengan ruang lingkup lebih luas menggunakan API chrome.commands. Aplikasi native di Electron, Tauri, dll., dapat menggunakan hook global tingkat OS. Aplikasi perbankan dan 2FA bergantung pada isolasi ini: tab berbahaya tidak dapat melakukan keylog pada manajer kata sandi Anda.

Apa cara yang tepat untuk mendeteksi «baru ditekan» vs «sedang ditahan»?

Untuk toggle, periksa !e.repeat di handler keydown, event pertama memiliki repeat: false, event auto-repeat berikutnya memiliki repeat: true. Untuk aksi berkelanjutan (gerakan game), lacak status tombol di Set: tambah pada keydown, hapus pada keyup, lalu di loop render Anda periksa keysHeld.has("KeyW"). Ini memisahkan input dari framerate dan menangani beberapa tombol simultan (bergerak + lompat).

Apakah ada yang dikirim ke server saat saya menekan tombol di sini?

Tidak. Event tombol ditangkap secara lokal oleh JavaScript dan ditampilkan di halaman ini tanpa permintaan jaringan apa pun. Buka tab Network di DevTools, ketik; Anda akan melihat nol lalu lintas keluar. Aman untuk pengujian dalam konteks apa pun, termasuk menemukan apa yang dihasilkan kata sandi atau shortcut sensitif di keyboard Anda.

Alat terkait