2013-03-09 7 views
8

次のサンプルコードは、ボタンを押したまま「keydown」メッセージを何度も出力します。文書saysでは、ボタンの1回の押下でkeydownイベントが1回発生します。したがって、keydownイベントは、次の例のkeypressイベントのように機能します。なぜ 'keydown'イベントが 'keypress'イベントのように機能するのですか?

<!DOCTYPE HTML> 
<html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
    <title></title> 

    <script type='text/javascript' src='jquery.js'></script> 
    <script type='text/javascript'> 
    function onLoad() 
    { 
     $('#text').on('keydown', function() { console.info('keydown') }); 
    } 
    </script> 

    </head> 
    <body onload='onLoad()'> 
    <input type='text' id='text'> 

    </body> 
</html> 

Windows、Firefox 19.0.2、Google Chrome 25.0.1364.152でテストしました。また、fiddleを作成しました(問題を再現できます)。問題が再現されるJQueryバージョン:1.8.2、1.9.1。

更新。

私は問題を実現しました:How can I avoid autorepeated keydown events in JavaScript?

+0

'' keydown 'イベントは' keypress 'イベントのように機能しますか?' – Sarfraz

+0

キーボードボタンを押すと、新しい 'keypress'とみなされるため、新しい文字が書き込まれるたびにプッシュイベントが発生します。 – deadlock

+0

@Sarfrazボタンを押すとkeydownイベントが1回だけ発生することに感謝します。例えば。 KeyUpイベントは、ボタンを放すと1回だけ発生し、ボタンを押すだけの事実に感謝します。 – sergzach

答えて

20

​​イベントは、キーが押された後、すぐにkeypressイベントが発生したときに発生します。その後、キーが離されると、keyupイベントが生成されます。

​​とkeypressの違いを理解するには、「文字」と「キー」の違いを理解すると便利です。 「キー」はコンピュータのキーボード上の物理的なボタンであり、「文字」はボタンを押すことによって入力される記号である。理論的には、​​とkeyupイベントは、押されているか解放されているかを表し、keypressイベントは入力中の文字を表します。理論の実装は、すべてのブラウザで同じではありません。

+4

私はちょうどそのキーアップを追加したいと思ってキーを押したままにキーを押して、キーを押したままにしてキーを繰り返し押します。 –

+3

@JesseEarle私たちはkeydownも繰り返し発射されることを知りました。 – sergzach

+0

上記の参照はスパムサイトにリンクしています。 – tyelford

1

keydownイベントは、キーが押された直後にkeypressイベントが発生したときに発生します。

1

私はゆっくりと私を、以下、ここで答えています: ​​:キー入力を開始したり、何かを変更したり、キーダウンが1つのプレスに対して1つの結果を与えるが、最終結果ではなく最後の結果の前に結果を与えるときに働く。 keyup:キーの入力をやめたり、戻ったり(削除文字のようなものを変更する)、最後の結果を与えるときに働きます。 keypress:キー入力を開始しても何かを変更し始めないときに働くkeydpressは、1回のプレスで1つの結果が得られますが、最後の結果が返されます(lastResult-1)

関連する問題