Apa yang baru di KeyboardEvents? Kunci dan kode!

Beberapa versi Chrome terakhir telah mendapatkan dua tambahan pada KeyboardEvent, yang digunakan sebagai parameter yang diteruskan ke pemroses peristiwa keydown, keypress, dan keyup. Atribut code (ditambahkan di Chrome 48) dan atribut key (ditambahkan di Chrome 51) memberi developer cara mudah untuk mendapatkan informasi yang seharusnya sulit menggunakan atribut lama.

Atribut kode

Yang pertama adalah atribut code. Ini disetel ke string yang mewakili tombol yang ditekan untuk menghasilkan KeyboardEvent, tanpa menggunakan tata letak keyboard saat ini (misalnya, QWERTY vs. Dvorak), lokalitas (misalnya, bahasa Inggris vs. Prancis), atau tombol pengubah apa pun. Hal ini berguna saat Anda ingin menekan tombol fisik mana yang ditekan, bukan karakter yang sesuai dengan tombol tersebut. Misalnya, jika Anda menulis game, Anda mungkin menginginkan serangkaian tombol tertentu untuk memindahkan pemain ke berbagai arah, dan pemetaan itu idealnya harus terpisah dari tata letak keyboard.

Atribut kunci

Selanjutnya, kita memiliki atribut key baru. Parameter ini juga disetel ke string, tetapi meskipun code menampilkan informasi tentang tombol fisik yang ditekan, key berisi karakter yang dihasilkan oleh tombol tersebut, dengan mempertimbangkan tata letak keyboard, lokalitas, dan tombol pengubah saat ini. Melihat nilai atribut key berguna saat Anda perlu mengetahui karakter apa yang akan ditampilkan di layar seolah-olah pengguna telah mengetik ke dalam input teks.

Apa artinya ini dalam praktiknya?

Untuk memberikan contoh konkret, asumsikan pengguna Anda menggunakan {i>keyboard<i} AS dengan tata letak {i>keyboard<i} QWERTY. Menekan tombol Q fisik pada keyboard tersebut akan menghasilkan KeyboardEvent dengan atribut code yang disetel ke "KeyQ". Hal ini berlaku terlepas dari tata letak keyboard, dan terlepas dari tombol pengubah lainnya. Sebagai perbandingan, pada keyboard Prancis (AZERTY), tombol ini masih akan memiliki code dari "KeyQ" meskipun huruf yang dicetak pada keycap adalah "a". Menekan tombol Q fisik pada keyboard AS yang sama biasanya akan menghasilkan KeyboardEvent dengan key yang disetel ke "q" (tanpa tombol pengubah), atau "Q" (dengan Shift atau CapsLock), atau "œ" (di OS X, dengan Alt). Pada keyboard AZERTY Prancis, tombol yang sama ini akan menghasilkan "a" (atau "A" dengan Shift atau CapsLock). Dan untuk tata letak keyboard lainnya, nilai key dapat berupa "й", "ض", "ㅂ", "た", atau beberapa karakter lainnya. Meninjau kembali contoh game kita sebelumnya, jika Anda ingin game menggunakan tombol WASD untuk gerakan, Anda dapat menggunakan atribut code dan memeriksa "KeyW", "KeyA", "KeyS", dan "KeyD". Ini akan berfungsi pada semua keyboard dan tata letak—bahkan keyboard AZERTY yang menukar posisi tombol "w" dan "z".

Keyboard virtual

Anda akan memperhatikan bahwa sampai sekarang, kita telah fokus pada perilaku yang mengasumsikan {i>keyboard<i} fisik. Bagaimana dengan pengguna yang mengetik di keyboard virtual atau perangkat input alternatif? Spesifikasi menawarkan panduan resmi untuk atribut code. Singkatnya, keyboard virtual yang meniru tata letak keyboard standar diharapkan untuk menghasilkan setelan code yang sesuai, tetapi keyboard virtual yang mengadopsi tata letak non-tradisional dapat menyebabkan code tidak disetel sama sekali.

Semuanya menjadi lebih mudah untuk atribut key, yang seharusnya Anda tetapkan ke string berdasarkan karakter yang diketikkan pengguna (secara virtual).

Cobalah

Gary Kačmarčík telah membuat demo fantastis untuk memvisualisasikan semua atribut yang terkait dengan KeyboardEvent:

Atribut KeyboardEvent

Dukungan lintas browser

Dukungan untuk atribut code, sejak penulisan ini, terbatas untuk Chrome 48+, Opera 35+, dan Firefox 44+. Atribut key didukung di Firefox 44+, Chrome 51+, dan Opera 38+, dengan dukungan sebagian di Internet Explorer 9+ dan Edge 13+.