これはおそらく意図した動作または少なくともjQuery/jsの問題ではありませんが、キーが押されたときにjQueryキー押しイベントが繰り返し発生しますが、すべてのキーには反映されません
$(document).bind('keypress', function(e){
switch(e.keyCode)
{
case 37:
console.log('left cursor keydown, will fire on hold');
break;
case 39:
console.log('right cursor keydown, will fire on hold');
break;
case 80:
console.log('p will only fire once per press!');
break;
}
});
あなたはまた、jQueryのドキュメントでの例で遊ぶことができます:
には、次のテイクhttp://api.jquery.com/keypress/左または右カーソルが押され
(例えばA,E,[,
などとして、あるいは他の多くのキー)、イベントが発生し、コンソールに素晴らしいログメッセージが表示されます。すべて細かい&です。しかし、今度はキーを押し続けてください。一時停止後、キーを押したときにキーダウンイベントが複数回発生することがわかりますが、p
(たとえば、j
)に当たってみると、一度。
私はFF 9.0.1とmac OSX 10.7.1とjQuery 1.7.1を使ってこれをテストしています。
これは設計によるものですか、ブラウザに依存する機能ですか、それともOSやキーボード自体と関係していますか?また誰もが繰り返すキーのリストを持っていますし、そうでないキーもありますか?
実際には使用されていない限り、これはカーソル・プレスにアニメーションをバインドしたときに切り取られ、キーが押されたときに奇妙な動作が見られるようになりました。私の回避策は、代わりにkeyup()
イベントを使用し、イベントでpreventDefault()
を使用して、カーソルを停止して画面をスクロールさせました。
更新: keypressイベントでは、ほとんどの文字でkeyCodeが常に0
であると思われます。なぜなら、ハンドラが1度だけ起動したと思った理由と関係するかもしれません。もう少しテストを重ねると、カーソルのような繰り返しログエントリが表示されます。あなたががjQueryのAPIのページをチェックして、その上でデモを使用している場合、それは私が記述した挙動を示す:/
すべてのキーが繰り返されます。意図的に抜けていない限り、各スイッチケースの最後に 'break'を追加する必要があります。あなたのキーボードが誤動作しているか、あなたのコードが何らかの 'break'を必要としているだけです。 –
私のためではありません - "p"はうまく繰り返します。私はそれがあなたのキーボードのハードウェア/ファームウェアの機能だと思います。 – Pointy
@BrianGrahamはちょうどそれを見つけた、感謝:) jsfiddleでこれをもう一度テストした後、私はすべてのキーにも繰り返しを見ている - しかし、keyCode attrは、私が奇妙な行動のいくつかを説明するkeypressイベントのほとんどのキーで0です見ていた – jammypeach