1. ホーム
  2. javascript

[解決済み] ctrl+zキーの組み合わせをjavascriptでキャプチャする

2022-12-09 08:34:32

質問

私は ctrl + z このコードでjavascriptのキーコンビネーションができます。

<html>
<head>
    <title>Untitled Document</title>
</head>
<body>

    <script type='text/javascript'>
        function KeyPress(e) {
            var evtobj = window.event? event : e


            //test1 if (evtobj.ctrlKey) alert("Ctrl");
            //test2 if (evtobj.keyCode == 122) alert("z");
            //test 1 & 2
            if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
        }

        document.onkeypress = KeyPress;
    </script>

</body>
</html>

コメント行 "test1"を押さえるとアラートが発生します。 ctrl キーを押しながら他のキーを押すとアラートが発生します。

コメント行 "test2"を押すとアラートが発生します。 z キーを押すとアラートが発生します。

test 1 & 2"の後の行のように、それらを一緒にして、[quot]キーを押しながら ctrl キーを押しながら z キーを押しても、期待通りのアラートは発生しません。

コードのどこが問題なのでしょうか?

どのように解決するのですか?

  1. 使用方法 onkeydown (または onkeyup ) ではなく onkeypress
  2. 使用する keyCode 90、122ではない

オンライン デモです。 http://jsfiddle.net/29sVC/

明確にするために キーコードは文字コードと同じではありません。

文字コードはテキストに対応します(エンコーディングによって異なりますが、多くの場合、0~127はASCIIコードのままです)。キーコードはキーボードのキーに対応します。例えば、ユニコードでは、0x22909は好を意味します。実際にこれに対応するキーを持つキーボードは(あったとしても)多くはないでしょう。

OSは、ユーザーが設定した入力メソッドを使って、キーストロークを文字コードに変換することを引き受けます。その結果は keypress イベントに送られます。(一方、keydown と keyup は、ユーザーがテキストを入力するのではなく、ボタンを押すことに反応します)。