イベントの種類
キー入力のイベントは、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 |