web-dev-qa-db-ja.com

jQuery .keypressおよび.keydown .which

では、.keypressと.keydown/.keyupの違いは何ですか?現在、キーに対して.which値38を返す.keydownを使用していますが、.keypressに変更すると、同じキーに対して値109が返されます。違いは何ですか?また、同じキーの値が異なるのはなぜですか?

34
ChrisMJ

ボタンを押すと、keydownが起動し、離すとkeyupが起動します。 keypressは通常、これら2つの間にあります。

keydownkeyupは、どのkeyが変更されたかについて話します。 keypressは、キーが表すcharacterを示します。

これはすべてブラウザに依存していることに注意してください!

さまざまなブラウザに実装されている主要なイベントの違いに関するこの記事 を参照してください。

22
RvdK

私はd $%^ @ dになりますが、実際にキーを押すと違いがあります。笑

私のフィドルを見て、文字「r」のようなものを試してください

http://jsfiddle.net/SpYk3/NePCm/

どういうわけか私はこれに注意を払ったことがない

詳細情報が見つかりました:

http://www.quirksmode.org/js/keys.html

「2つのプロパティはkeyCodecharCodeです。簡単に言えば、keyCodeはユーザーが押した実際のキーボードキーについて何かを言い、charCodeはASCII結果の文字の値。これらの情報のビットは同じである必要はありません。たとえば、小文字の「a」と大文字の「A」は同じkeyCode。ユーザーは同じキーを押しますが、結果の文字が異なるため異なるcharCodeを押します。

ExplorerおよびOperado notcharCodeをサポートしません。ただし、文字情報はkeyCode、ただしonkeypressのみ。onkeydownおよび-upkeyCodeにはキー情報が含まれています。」

21
SpYk3HH

次の投稿を読む必要があります。 http://javascript.info/tutorial/keyboard-events

キーダウンは、キーを押すとトリガーされ、スキャンコードを提供します。キー押下はキーダウン後にトリガーされ、文字コードを提供しますが、文字キーに対してのみ保証されます。

14
jbl

通常は、keyupに進みます。

$(document).keyup(function(e){
  console.log(e.which);
});

理由:

  1. keydownkeypressは1回だけ起動しますが、ユーザーがキーを押したままにすると、keyupは起動し続けます。
  2. keypressは特別なキー(例:SHIFT)、keydownおよびkeyupは検出しません。
7
Lucia

KeyPressはKeyDownの後に発生します。したがって、KeyDownを使用してキーを決定し、KeyPressを使用してその文字を禁止できます。

2
Denzyl Dick