Saya memindai jawaban di atas dan pendekatan keydown
/ yang diusulkan keyup
hanya berfungsi dalam keadaan khusus. Jika alt-tab pengguna menjauh, atau menggunakan isyarat tombol untuk membuka jendela atau tab browser baru, maka a keydown
akan terdaftar, yang tidak masalah, karena pada saat itu tidak mungkin untuk mengetahui apakah kuncinya adalah sesuatu yang dipantau aplikasi web , atau browser standar atau pintasan OS. Kembali ke halaman browser, ia masih berpikir bahwa kunci tersebut ditahan, meskipun sementara itu dirilis. Atau beberapa kunci disimpan begitu saja, saat pengguna beralih ke tab atau aplikasi lain dengan mouse, lalu dilepaskan di luar halaman kami.
Tombol pengubah ( Shift
dll.) Dapat dipantau melalui mousemove
dll. Dengan asumsi bahwa setidaknya ada satu interaksi mouse yang diharapkan saat melakukan tab ke belakang, yang sering terjadi.
Bagi kebanyakan semua kunci lainnya (kecuali pengubah, Tab
, Delete
, tapi termasuk Space
, Enter
), pemantauan keypress
akan bekerja untuk sebagian besar aplikasi - kunci ditekan akan terus api. Ada beberapa latensi dalam menyetel ulang kunci, karena periodisitas keypress
penembakan. Pada dasarnya, jika keypress
tidak terus aktif, maka mungkin saja untuk mengesampingkan sebagian besar kunci. Ini, dikombinasikan dengan pengubah cukup kedap udara, meskipun saya belum menjelajahi apa yang harus dilakukan dengan Tab
dan Backspace
.
Saya yakin ada beberapa perpustakaan di luar sana yang mengabstraksi kelemahan DOM ini, atau mungkin beberapa perubahan standar DOM menanganinya, karena ini pertanyaan yang agak lama.