イベントの種類
キー入力のイベントは、keydownとkeyupで、keydownはキーを押したときに発火し、keyupはキーを離したときに発火する。
keypressはデバイス依存度が高いためfired(廃止)とされている。
イベントリスナーの登録
イベントの登録方法は以下の通り(全て小文字であることに注意)。
.addEventListener('keydown', callback, false)
.addEventListener('keyup', callback, false)
.on('keyDown', callback)
.on('keyUp', callback)
イベントの発生順
基本
キーが押下されるとkeydownイベントが発生し、元に戻るとkeyupイベントが発生する。たとえば英子文字のaの場合は以下の順番。
keydown, 'a'keyup, 'a'
キーを押し続けるとリピート機能によりkeydownが繰り返して発生し、離したときにkeyupイベントが1回発生する。
SHIFTキーを押しながらの場合は、例えば英大文字のAの場合以下の順番。
keydown, 'Shift'keydown, 'A'keyup, 'A'keyup, 'Shift'
ただしSHIFTキーにもリピート機能が働いた場合、keydownが繰り返される。
TABとCAPS LOCK
TABキーとCAPS LOCKキーの2つのキーについては、keydownは発生するがkeyupは捕捉しない(1.1.0と3.4.1で同じ結果)。
ただしSHIFT + CAPS LOCKはkeyの値が'CapsLock'としてkeydownとkeyupの両方が発火する。
イベントの発火状況については以下のコードで確認した。
|
1 2 3 4 |
$(window).on({ 'keydown': (e) => console.log('keydown :' + e.key), 'keyup': (e) => {console.log('keyup :' + e.key); if (e.key===' ') console.log('ok');} }); |
キーの内容の参照
参照方法
キーの内容は、コールバックの引数で得られるイベントオブジェクトのプロパティーで参照する。
addEventListener(event_name, (e) => {})
on(event_name, (e) => {})
上記の場合、コールバックの引数eのプロパティーkey、codeで必要なキーの値を参照する。ただしcodeプロパティーはJQuery3.4.1など新しいバージョンからでないとundefinedになる。
また、keyCodeプロパティーはdeprecatedとなっている。
keyプロパティー
キーボードのキー配置によらない文字や機能としての値はkeyプロパティーで参照する。
codeプロパティー
codeプロパティーはキーボードに割り付けられた文字や機能に関係なく、キーボード上の位置としての値を返す。QWERTY配列上の文字で返すため、キー配列の種類に依らない物理的なキー位置を特定できるが、Dvorak配列など割り当てられた文字の位置が違う場合、ユーザーの意図した文字と違う値が変える。
CTRLやSHIFTど左右にキーがある場合、それらの左右が区別される。
JQueryでは3.1.xでもundefinedで、3.4.1では機能する。
機能キーの押下状態の捕捉
以下のプロパティーは、SHIFT/CTRL/ALTの各キーが押されている場合にtrueを返す。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Key ALT/CTRL/SHIFT</title> <script src="https://code.jquery.com/jquery-1.11.0.min.js"></script> <script> $(() => { $(window).on('keyup', (e) => { console.log('key :' + e.key); if (e.altKey) console.log('ALT pressed.'); if (e.ctrlKey) console.log('CTRL pressed.'); if (e.shiftKey) console.log('SHFT pressed.'); }); }); </script> </script> </head> <body> </body> </html> |
このコードの実行例を以下に示す。a単独、ALT+b、CTRL+c、SHIFT+dと押した結果、それぞれの機能キーの押下状況が捕捉されている。
|
1 2 3 4 5 6 7 8 9 10 |
keyup:a keyup:b ALT pressed. keyup:Alt keyup:c CTRL pressed. keyup:Control keyup:D SHFT pressed. keyup:Shift |