50

関連: JavaScript KeyCode vs CharCode

自宅または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 つのキーイベントが異なるキーコードを与える方法です。

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

4

3 に答える 3

49

イベントの目的はまったく異なります。keyupおよびを使用しkeydownて、物理キーkeypressを識別し、入力された文字を識別します。この 2 つは、イベントが異なる根本的に異なるタスクです。2つを混ぜようとしないでください。特に、keyCodeon keypressevents は通常冗長であり、使用すべきではありません (古い IE を除きますが、詳細については以下のリンク先のドキュメントを参照してください)。印刷可能なキープレスの場合、ブラウザーによって多少の違いはありますが、通常はwhichおよび と同じです。charCode

キー イベントに関する Jan Wolter の記事は、既に別の回答でリンクされていますが、このテーマに関する決定的な言葉であり、キー イベントの各タイプと各ブラウザに対して異なるプロパティのそれぞれが返すものを説明する表があります。

于 2012-06-14T10:00:45.990 に答える
2

quirksmode.orgには、その質問に正確に答える良い記事があります。Unixpapa の結果も参照してください。

于 2012-06-14T09:51:26.437 に答える