この質問はおそらく以前に尋ねられたことがありますが、ここでもインターチューブでも、それを見つけるのに適した検索フレーズを見つけることができません.
キーボードを使用するゲームの Web ページがあるため、jQuery を使用してドキュメントにハンドラーを設定しました。
$(document).keydown(myKeydown);
$(document).keyup(myKeyup);
$(document).blur(myBlur);
しかし今では、入力フィールドに書かれたテキストはすべてドキュメント イベント ハンドラによって盗まれ、文字はドキュメント ハンドラで使用されていない場合にのみ入力に到達します。これらのハンドラーは、本質的に次のようになります。
function myKeydown(event)
{
if (event.which == 65)
{
console.log('a pressed');
return false;
}
return true;
}
ここで、テキスト入力ボックスがあるとします。「a」以外のキーを押すと、入力に表示されますが、「a」は表示されません(myKeydownがfalseを返すことで「食べている」ため)。いずれの場合でも true を返すことができますが、入力ボックスがフォーカスされていない場合、「入力時に検索」などの奇妙なことが有効になっていると表示されます。
入力ボックスのハンドラを追加しようとしました:
input.keydown(function() { console.log('down'); return false; });
input.keyup(function() { console.log('up'); return false; });
input.blur(function() { console.log('blur'); return false; });
このコードでは、console.logs を取得しますが、もちろんキーはボックスに到達しません (プレスで何もしていないため)。これらのイベントをどこかに送信して、対応するキーが入力ボックスに表示されるようにすることはできますか?
注:一部の人々は、event.stopPropagation()
の代わりに使用することを提案していますreturn false
。jQueryのドキュメントには次のように書かれています:
ハンドラーから false を返すことは、イベント オブジェクトで .preventDefault() と .stopPropagation() の両方を呼び出すことと同じです。"
それがまさに私が望んでいることです。「入力しながら検索」が開始されないようにするには、入力を入力してページで「入力しながら検索」するというデフォルトのアクションを防止する必要があります。
(また、何らかの理由でkeydown
イベント ハンドラーに Firefox 最新の stopPropagation() 関数がありません。)