初級 JavaScript イベント キーボード

押したキーの情報を調べる

キーボードを押すと、そのキーの文字・位置・キー番号、Shift や Ctrl を押しているかを表示します。キーボード操作を扱うプログラムの第一歩です。

このサンプルは2017〜2018年ごろに作成したものです。PHPのバージョンが上がり、そのままでは動かなくなっていたため、2026年に PHP 8.3 で動くように書き直し、解説も新しくしました。

DEMO 実際に動かしてみよう

キーボードの好きなキーを押してください。(パソコン用のデモです)

?
e.key(押された文字)-
e.code(キーの位置)-
e.keyCode(キー番号・古い書き方)-
Shift-
Ctrl-
Alt-

解説コードを読んでみよう

このサンプルでわかること

  • addEventListener で「キーが押された」ことを受け取る方法
  • イベントオブジェクト e から、押されたキーの情報を取り出す方法
  • e.key・e.code・e.keyCode のちがい

使っているファイル

  • index.phpデモのページ(HTML・CSS・JavaScript がすべてこの中)

1. 結果を表示する場所を用意する

押したキーを大きく表示する箱と、くわしい情報を並べる表を作ります。JavaScript から書き換えるので、それぞれに id をつけておきます。

index.php(13〜23行目) HTML
<div class="kc">
  <div class="kc__big" id="key">?</div>
  <table class="kc__table">
    <tr><th>e.key(押された文字)</th><td id="k-key">-</td></tr>
    <tr><th>e.code(キーの位置)</th><td id="k-code">-</td></tr>
    <tr><th>e.keyCode(キー番号・古い書き方)</th><td id="k-keycode">-</td></tr>
    <tr><th>Shift</th><td id="k-shift">-</td></tr>
    <tr><th>Ctrl</th><td id="k-ctrl">-</td></tr>
    <tr><th>Alt</th><td id="k-alt">-</td></tr>
  </table>
</div>

2. 表示する場所を探しておく

document.getElementById('id名') で HTML の要素を探し、変数に入れておきます。キーを押すたびに探し直さなくてすむので、処理が軽くなります。

index.php(35〜43行目) JavaScript
(function() {
    // 表示する場所を先に探しておく
    var big     = document.getElementById('key');
    var keyEl   = document.getElementById('k-key');
    var codeEl  = document.getElementById('k-code');
    var numEl   = document.getElementById('k-keycode');
    var shiftEl = document.getElementById('k-shift');
    var ctrlEl  = document.getElementById('k-ctrl');
    var altEl   = document.getElementById('k-alt');

全体を (function() { ... })(); で囲んでいるのは、ここで作った変数が他のプログラムとぶつからないようにするためです(即時関数といいます)。

3. キーが押されたら情報を書き込む

document.addEventListener('keydown', keyDownFunc) は「ページのどこかでキーが押されたら keyDownFunc を呼んでください」という意味です。呼ばれるとき、押されたキーの情報が引数 e に入ってきます。

index.php(45〜58行目) JavaScript
    // キーが押されたときに呼ばれる関数
    function keyDownFunc(e) {
        big.textContent     = e.key === ' ' ? 'Space' : e.key;
        keyEl.textContent   = e.key;
        codeEl.textContent  = e.code;
        numEl.textContent   = e.keyCode;
        shiftEl.textContent = e.shiftKey;   // true / false
        ctrlEl.textContent  = e.ctrlKey;
        altEl.textContent   = e.altKey;
    }

    // ページ全体で「キーが押された」を受け取る
    document.addEventListener('keydown', keyDownFunc);
})();
プロパティ中身Shift+A を押したとき
e.key入力される文字A
e.codeキーボード上のキーの位置(言語や Shift に関係なく同じ)KeyA
e.keyCodeキーの番号65
e.shiftKeyShift を押しているかtrue
e.ctrlKey / e.altKeyCtrl / Alt を押しているかfalse

e.keyCode は古い書き方で、今は「非推奨」とされています。新しく作るときは e.key(文字で判定したいとき)か e.code(キーの位置で判定したいとき)を使いましょう。書き直す前のサンプルは keyCode と String.fromCharCode() を使っていましたが、記号キーなどで正しい文字にならないことがあったため、e.key を表示するように変えました。

日本語入力をオンにした状態でキーを押すと、e.key が Process になることがあります。入力モードを切り替えて、表示がどう変わるか確かめてみましょう。

↑