JavaScriptキーコード検索

キーボードの任意のキーを押して、JavaScriptイベントプロパティを確認します。

キーを押してください…

JavaScript のキーボードイベントの 30 年史

まだキーが押されていません

仕組み

  1. キーを押す: 入力ゾーンをクリックして、任意のキー, 文字、数字、ファンクションキー、矢印、修飾キー、特殊キー, を押します。
  2. キーコードを読む: ツールはキーのevent.key、event.code、event.keyCode(レガシー)、charCode値を瞬時に表示します。
  3. コードで使用: キーボードイベントリスナーまたはホットキー実装に必要な正確な値をコピーします。

なぜKeyCode検出ツールを使うのか?

JavaScriptキーボードイベントは複数の異なるプロパティを公開します, key、code、keyCode、charCode、which, どれを使うか、どの値と比較するかは常に難しいです。KeyCode検出ツールは、キーを押して、すべてのイベントプロパティをすぐに表示できるようにすることで、推測を排除します。キーボードショートカットの構築、特殊キーの処理、ホットキーの実装、キーボードイベントリスナーのデバッグに貴重です。

機能

よくある質問

event.keyとevent.keyCodeの違いは?

event.keyはモダンな標準です, 「ArrowLeft」や「Enter」のような読みやすい文字列を返します。event.keyCodeはレガシーの数値コード(非推奨ですが、まだサポートされています)。新しいコードにはevent.keyを使用し、古いブラウザとの互換性を維持するためにevent.keyCodeを使用します。

Ctrl+Sなどのキーの組み合わせを検出するには?

キーボードの組み合わせは、event.keyを修飾キーチェックと組み合わせて使用します: if (event.ctrlKey && event.key === "s")。このツールでCtrl+Sを押してすべての値を表示し、イベントリスナーで同じ条件を再現します。

なぜ一部のキーが同じkeyCodeを表示するのですか?

keyCode値は標準化されておらず、一部のキーはコンテキストに応じてコードを共有します。event.codeはより信頼性が高く、キーボードレイアウトに関係なくキーの物理的な位置(例: 「KeyA」)を識別します。一方、event.keyはそのキーが生成する文字を反映します。

JavaScript のキーボードイベントの 30 年史

キーボードイベントには、DOM 内で悪名高いほど乱雑な歴史があります。Netscape Navigator 2(1995年)は、仕様のなかった数値の keyCode プロパティを持つ元の onkeydownonkeypressonkeyup ハンドラを導入しました。ブラウザはそれぞれ独自の値を発明しました。Internet Explorer 4(1997年)は、event.keyCode を唯一のプロパティとする独自のバリアントを実装し、Netscape は event.which に固執しました。DOM Level 2 Events(W3C、2000年11月)はイベントフロー(キャプチャ/バブル)を標準化しましたが、ベンダーが合意できなかったため、キーボードイベントは明示的に棚上げにしました。結果:開発者は10年以上にわたって e.keyCode || e.which のようなコードを書きました。DOM Level 3 Events(W3C ワーキングドラフト 2003、勧告 2018)は最終的に、モダンな event.key(Unicode 文字または「ArrowLeft」のような名前付きキー)と event.code(レイアウトに依存しない物理的なキー位置、例えば「KeyA」)を導入し、同時に keyCodecharCodewhich を非推奨にしました。UI Events 仕様(W3C、進行中)はこの作業の現代的な家です。ブラウザは徐々に追いつきました:Chrome 51(2016年5月)、Firefox 47(2016年6月)、Safari 10.1(2017年3月)はすべて event.code サポートを出荷しました。レガシーの keypress イベントは beforeinput および input イベントに代わって非推奨です。

5 つのプロパティ、解読

キーコード検索が実際に重要な場所

キーボードイベント処理の一般的な間違い

その他のよくある質問

ユーザーが非 US キーボードを使用しているときに、なぜキーハンドラが発火しないのですか?

ほぼ常に、そのレイアウトで Shift とのみ存在する文字に対して event.key をチェックしているためです。ドイツの QWERTZ キーボードでは、「/」は Shift+7(独自のキーではない)。フランス語の AZERTY では、数字 0-9 は Shift+上の行で入力されます。位置ベースのショートカットには event.code(物理キー)、ユーザーが入力した文字を実際に必要とするコンテンツベースのショートカットには event.key を使用します。

Cmd+K / Ctrl+K をプラットフォーム間で一貫して処理する方法は?

標準的なイディオム:if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); openPalette(); }。macOS では、e.metaKey が Cmd キーです。Windows/Linux では、e.ctrlKey がユーザーが期待するものです。両方を受け入れます。一部のブラウザではブラウザが Cmd+K を「アドレスバーフォーカス」にバインドするため、常に preventDefault。キー長押しでの発火を避けるために !e.repeat を追加します。

JavaScript はページ外のグローバルキーストロークを検出できますか?

いいえ、これはセキュリティのための設計です。ブラウザは、フォーカスされたページまたは要素に対してのみキーボードイベントを発生させます。ブラウザ拡張機能は、chrome.commands API を使用してより広い範囲でリッスンできます。Electron、Tauri などのネイティブアプリは、OS レベルのグローバルフックを使用できます。銀行および 2FA アプリはこの分離に依存しています:悪意のあるタブはパスワードマネージャをキーロギングできません。

「ちょうど押された」vs「押し続けている」を検出する正しい方法は?

トグルの場合、keydown ハンドラで !e.repeat をチェックします, 最初のイベントは repeat: false、後続の自動繰り返しイベントは repeat: true です。連続アクション(ゲーム移動)の場合、Set でキー状態を追跡します:keydown で追加、keyup で削除、次にレンダリングループで keysHeld.has("KeyW") をチェックします。これは入力をフレームレートから切り離し、複数の同時キー(移動 + ジャンプ)を処理します。

ここでキーを押すと、何かサーバーに送信されますか?

いいえ。キーイベントは JavaScript によってローカルでキャプチャされ、ネットワークリクエストなしでこのページに表示されます。DevTools で Network タブを開き、入力します。アウトバウンドトラフィックはゼロです。パスワードや機密ショートカットがキーボードで何を生成するかを発見することを含め、あらゆるコンテキストでテストするのに安全です。

関連ツール