1. ホーム
  2. javascript

[解決済み] javascriptでキー入力を検出する最も簡単な方法 [終了しました].

2023-06-03 03:01:20

質問

私はjavascriptでゲームのためのアイデアを持っている(私はEaselJSでそれを作るつもりです)、私はキープレスを検出する必要があります。インターネット上で探し回った後、私は多くの提案(window.onkeypressを使用する、jQueryを使用するなど)を見ましたが、ほとんどすべてのオプションに対して反論があります。皆さんはどのような提案をされますか?jQueryを使うのは簡単そうですが、私はそのライブラリをほとんど使ったことがないので(javascriptのベテランでもありません)、むしろ避けたいと思っています。jQueryが最良の選択肢である場合、これを行う方法の良い例(説明付きであれば最高です)をどなたか教えてください。

私はこれがたくさん尋ねられると思うが、私は明確な答えを見つけることができなかった。事前にありがとうございます。

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

プレーンなJavascriptでは、最もシンプルです。

document.onkeypress = function (e) {
    e = e || window.event;
    // use e.keyCode
};

しかしこれでは、イベントに対して1つのハンドラしかバインドできません。

さらに、以下のようにすれば、同じイベントに複数のハンドラをバインドできる可能性があります。

addEvent(document, "keypress", function (e) {
    e = e || window.event;
    // use e.keyCode
});

function addEvent(element, eventName, callback) {
    if (element.addEventListener) {
        element.addEventListener(eventName, callback, false);
    } else if (element.attachEvent) {
        element.attachEvent("on" + eventName, callback);
    } else {
        element["on" + eventName] = callback;
    }
}

どちらの場合でも keyCode はブラウザ間で一貫していないので、もっと確認し把握することがあります。注目すべきは e = e || window.event - にイベントを置くのは、Internet Explorer では通常の問題です。 window.event に置くことです。

リファレンスです。

jQueryで。

$(document).on("keypress", function (e) {
    // use e.which
});

参照

jQuery が "large" なライブラリであること以外に、jQuery はブラウザ間の不整合、特にウィンドウ イベントで本当に役立ちます...そしてそれは否定できないのです。私が例に挙げたjQueryのコードは、よりエレガントで短く、かつ一貫した方法であなたの望むことを実現していることがお分かりいただけると思います。あなたが信頼できるのは e (イベント) と e.which (どのキーが押されたかを知るためのキーコード)は正確です。プレーンなJavascriptでは、jQueryライブラリが内部で行っていることをすべて行わない限り、知ることは少し困難です。

のように keydown イベントがありますが、これは keypress . 詳しくはこちらで解説しています。 onKeyPressとonKeyUpおよびonKeyDownの比較

何を使うべきかについては、フレームワークを学ぶ気があるなら、間違いなくjQueryを使うことをお勧めします。同時に、Javascript の構文、メソッド、機能、および DOM とのやり取りを学ぶ必要があると言えます。どのように動作し、何が起こっているのかを理解すれば、jQueryを使った作業がより快適になるはずです。私にとっては、jQueryは物事をより一貫させ、より簡潔なものにしてくれます。結局のところ、Javascriptであり、言語を包むものなのです。

jQueryが非常に有用であるもう一つの例は、AJAXです。ブラウザはAJAXリクエストの処理方法に一貫性がないので、jQueryはそれを抽象化し、心配する必要がありません。

ここで、判断材料になりそうなことを書いておきます。