2012-06-14 9 views
36

関連:ここJavaScript KeyCode vs CharCodekeypressとkeyup - なぜkeyCodeが違うのですか?

は、あなたが自宅やjsfiddleに試すことができますいくつかのコードです:

el.addEventListener('keyup', function(e) { 
    console.log('Keyup event'); 
    console.log(e.keyCode); 
}); 
el.addEventListener('keypress', function(e) { 
    console.log('Keypress event'); 
    console.log(e.keyCode); 
}); 

なぜのkeyCodeは違うのですか?

私が理解できないのは、私が理解できないのは、キーボードの同じヒットキーで2つのキーイベントが異なるkeyCodeを与える方法です。

PS:これまでのブラウザのサポートについて心配していないので、Chromeでこれを試したところ、驚いて説明が見つかりませんでした。

+0

[onKeyPress Vs. onKeyUpとonKeyDown](http://stackoverflow.com/questions/3396754/onkeypress-vs-onkeyup-and-onkeydown)はやや関連性があり、興味深い読書かもしれません。 –

答えて

42

イベントはまったく異なる目的のためのものです。物理キーを識別するにはkeyupと​​、型付き文字を識別するにはkeypressを使用します。この2つは、さまざまなイベントを伴う基本的に異なるタスクです。 2つを混在させないでください。特に、keypressイベントのkeyCodeイベントは通常は冗長であり、使用しないでください(古いIEでは例外ですが、詳細についてはリンクされたドキュメントを参照してください)。印字可能なキー押下の場合は、通常はwhichcharCodeと同じですが、ブラウザ間にはいくつかのバリエーションがあります。

Jan Wolter's article on key eventsは、すでに別の回答にリンクされていますが、私にとってこの主題の決定的な言葉であり、それぞれの種類のキーイベントと各ブラウザごとに異なるプロパティが何を返すかを説明する表があります。

+5

私は目的が異なることを理解しています。* keys *が同じであっても、keyCodeが異なるという事実には答えません。 –

+0

@FlorianMargaine:Jan Wolterのページに各イベントごとに各プロパティが返すものを示すテーブルがあります。WebKit(と実際にはほとんどのブラウザ)では、 'keyCode'は' keypress'イベントの 'which'と' charCode'と同じものを返します。これはキーのキーコードではなく、型付けされた文字に対応する文字コードです( 'keyup'と' keydown'のように)押されています。 –

+1

この部分の記事を慎重に読んでください: 'keydownとkeyupイベントでは、キーコードは文字コードではなく、この変換は多くのキーに対して荒い結果をもたらします。キーコードを文字に変換する一般的な移植可能な方法はありません。あなたはかなりブラウザのタイプを感知し、それに対するキーマッピングをベースにしなければなりません。私は国際キーボードによって送られたキーコードに関する情報を持っていません。 ':)あなたの答えに感謝btw! –

2

正確にその質問に答えるgood article on quirksmode.orgがあります。 Unixpapa's resultsもご覧ください。

+0

quirksmodeは特に言っています: '小文字の 'a'と大文字の 'A'は同じkeyCode'を持っています。それがわかりません。私が逃したものはありますか? 2番目の記事は、関連する質問でリンクされています: –

+1

キーボード上の同じキーです。異なる修飾キー(シフト)を使用しています。キーアップ/ダウンはキーストローク、キー入力はキー入力です。 – Bergi

+0

だから彼らは同じkeyCodeを与えるべきです。なぜ彼らはイベントに応じていないのですか? –

0

私は、ユーザーの入力をフォームの入力からフォームの他の部分にコピーしようとしたときに、1つの違いに遭遇しました。 私が見つけたのは、ユーザーが入力を完了したときにキーを使用して次のラベルに移動するたびに、eventListenerを使用してkeypressを使用したときに、最後のキーボード入力がコピーされたエントリで欠落し、

ので、結論にキーがは、キー入力の結果を脇に残して、押された時にキーが押された後からkeyupは、システムの状態に耳を傾ける一方、キー押下は、瞬間の状態を聞き、は、結果が含まれますキーを押す。

関連する問題