[解決済み] javascriptでキー入力を検出する最も簡単な方法 [終了しました].
質問
私は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
に置くことです。
リファレンスです。
- https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/keypress
- https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener
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はそれを抽象化し、心配する必要がありません。
ここで、判断材料になりそうなことを書いておきます。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] $.ajax実行中にローディングイメージを表示する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Enterキーが押されたときにフォームを送信しないようにする
-
[解決済み】onKeyPressとonKeyUp、onKeyDownの比較
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする