これら3つのイベントの違いは何ですか?グーグルで私はそれを見つけた
KeyDownイベントは、ユーザーがキーを押すと発生します。
KeyUpイベントは、ユーザーがキーを離したときに発生します。
KeyPressイベントは、ユーザーがキーを押して放したときに発生します。 (onKeyDownの後にonKeyUp)
私は最初の2つを理解していますが、KeyPressと同じではありませんKeyUp? (または押さないでキー(KeyUp)を放すこともできますか(KeyDown)それを押しますか?)
これは少しややこしいです、誰かが私のためにこれを片付けることができますか?
アーカイブされた link もともとこの答えで使われていたものをここでチェックしてください。
そのリンクから:
理論的には、keydownイベントとkeyupイベントはキーの押下または解放を表し、keypressイベントは入力中の文字を表します。理論の実装はすべてのブラウザで同じではありません。
KeyPress
、KeyUp
およびKeyDown
は、それぞれClick
、MouseUp,
およびMouseDown
に類似しています。
Down
が最初に出現しますPress
があります(テキストが入力されたとき)Up
は最後に行われます(テキスト入力が完了したとき)。keydown
keypress
textInput
keyup
編集数ヶ月前にVsyncがデモスニペットを追加しましたが、機能しなくなったため削除しました。「Uncaught DOMException:からの 'localStorage'プロパティの読み取りに失敗しました。 'Window':文書はサンドボックス化されており、 'allow-same-Origin'フラグがありません。テストページで試すことができます、しかし:
window.addEventListener("keyup", log);
window.addEventListener("keypress", log);
window.addEventListener("keydown", log);
function log(event){
console.log( event.type );
}
onkeydown
はキーが押されたときに起動されます(ショートカットのように。例えばCtrl+A
では、Ctrl
は 'down'のままです)。
キーが解放されたときにonkeyup
が起動されます(修飾子/ etcキーを含む)
onkeypress
は、onkeydown
とonkeyup
の組み合わせとして、またはキーボードの繰り返しに応じて(onkeyup
が起動されていない場合)起動されます。 (この繰り返し動作は私がテストしていないものです。テストしている場合は、コメントを追加してください。)
何らかのテキストが入力されるとtextInput
(Webキットのみ)が起動されます(たとえば、Shift+A
は大文字の「A」を入力しますが、Ctrl+A
はテキストを選択し、テキスト入力を入力しません。その場合、他のすべてのイベントが起動されます)。
ここでの答えの大部分は実際的な問題よりも理論に焦点を合わせており、少なくともFirefoxでは入力フィールド値に関連するためkeyup
とkeypress
の間には大きな違いがいくつかあります(43でテスト済み)。
ユーザーが空の入力要素に1
を入力した場合:
Input要素の値はkeypress
ハンドラ内の空の文字列(古い値)になります
Input要素の値はkeyup
ハンドラー内の1
(新しい値)になります。
インライン検証や自動タブ移動など、現在の値ではなく入力後の新しい値を知ることに頼ることをしている場合、これは非常に重要です。
シナリオ:
12345
を入力します。12345
を選択します。A
を入力します。文字keypress
を入力した後にA
イベントが発生すると、テキストボックスに文字A
のみが含まれるようになりました。
しかし:
12345
です。5
ですそのため、ブラウザ(Firefox 43)がユーザーの選択を消去し、thenがkeypress
イベントを発生させ、thenがフィールドの内容を更新し、then fireが発生するkeyup
。
Onkeypressとonkeydownは同じことをしているようです(ただし、ショートカットキーの小さな違いは既に説明しました)。
これを試すことができます:
<textarea type="text" onkeypress="this.value=this.value + 'onkeypress '"></textarea>
<textarea type="text" onkeydown="this.value=this.value + 'onkeydown '" ></textarea>
<textarea type="text" onkeyup="this.value=this.value + 'onkeyup '" ></textarea>
そして、onkeypressとonkeydownのイベントは両方ともキーが押されている間ではなくキーが押されている間に発生します。
違いは、イベントが1回ではなく何度もトリガーされることです(キーを押したままにしている限り)。それを認識し、それに応じて対処してください。
この 記事 Jan Wolterが私が出会った中で最高の作品です。アーカイブされたコピーを見つけることができます here リンクが切れている場合。
ブラウザのすべてのキーイベントを非常によく説明しますが、
keydownイベントは、キーが押されたときに発生し、すぐにkeypressイベントが続きます。次に、キーが放されると、keyupイベントが生成されます。
keydownとkeypressの違いを理解するには、charactersおよびkeys。 keyは、コンピューターのキーボード上の物理的なボタンです。 characterは、ボタンを押して入力する記号です。 USキーボードで、 4 キーを押しながら Shift キーは通常「ドル記号」文字を生成します。これは、必ずしも世界中のすべてのキーボードに当てはまるわけではありません。理論的には、keydownおよびkeyupイベントはキーが押されているか放されていることを表し、keypressイベントは、入力されている文字を表します。実際には、これは常に実装方法とは限りません。
しばらくの間、一部のブラウザはkeypressの直後にtextInputと呼ばれる追加イベントを発生させました。 DOM 3標準の初期バージョンでは、これをkeypressイベントの代替として意図していましたが、全体の概念は後に取り消されました。 Webkitはバージョン525と533の間でこれをサポートしており、IEがサポートしていると聞いていますが、WebkitがtextInputIEはそれを呼び出しましたtextinput。
inputと呼ばれるイベントもあり、すべてのブラウザでサポートされ、textareaに変更が加えられた直後に起動されますまたは入力フィールド。通常、キーを押すと起動し、入力した文字がテキスト領域に表示され、入力が起動します。 inputイベントは、実際に入力されたキーに関する情報を提供しません-変更されたものを把握するためにテキストボックスを調べる必要があるため、実際には考慮しませんこれは重要なイベントであり、実際にここに文書化しないでください。もともとはテキストエリアと入力ボックスに対してのみ定義されていましたが、他のタイプのオブジェクトでも同様に起動するように一般化する動きがあると思います。
Onkeydownイベントがすべてのキーに対して機能するすべてのブラウザで、ALT、CTRL、SHIFT、ESCを除くすべてのキーに対してonkeypressイベントが機能します。手段onkeydownイベントはすべてのキーをキャプチャします。
まず、それらは異なる意味を持ちます。
次に、いくつかのキーはこれらのイベントのいくつかを起動し、他のイベントは起動しません。例えば、
また、event.keyCode
(およびevent.which
)は通常KeyDownとKeyUpに対して同じ値を持ちますが、KeyPressに対しては異なる値を持ちます。試してみてください 遊び場 私は作った。ちなみに、私はかなり奇妙なことに気づきました。 ctrl+a KeyPressがevent.keyCode
(およびevent.which
)が1
に等しい場合に発生するため、input
/textarea
は空です。 (入力が空でない場合は、まったく起動しません)。
最後に、いくつかの実用性があります。
textarea
のようにキーを押したときにKeyPressとKeyDownの両方が複数回発生する場合(Chrome 71)、複数回発生するイベントとKeyUpが単一のキーの解放に必要な場合はKeyDownを使用します。input
sとtextarea
sに対して異なる動作をします(主にフォーカスが失われたため)。私は自分のプロジェクトで3つすべてを使用しましたが、残念ながら実用性の一部を忘れているかもしれません。 (注意:input
とchange
イベントもあります)
好奇心を共有したいだけでした。
onkeydownイベントを使ってJSメソッドを起動するとき、そのイベントの文字コードはonkeypressで得られるものと同じではありません。
たとえば、テンキーのキーは、onkeypressを使用するときは文字キーの上の数字キーと同じ文字コードを返しますが、onkeydownを使用するときはそうではありません。
Onkeydownを使用しているときに特定の文字コードをチェックするスクリプトが失敗した理由を理解するためにかなりの時間がかかりました。
デモ: https://www.w3schools.com/code/tryit.asp?filename=FMMBXKZLP1MK
はい。メソッドの定義が異なることを私は知っています..しかし、非常に混乱しているのは両方のメソッドでイベントの結果がevent.keyCodeを使って検索されるということです。宣言的な実装.
基本的に、これらのイベントはブラウザの種類やバージョンによって動作が異なります。jsBinの小さなテストを作成しました。ターゲット環境でこれらのイベントがどのように動作するかをコンソールで確認できます。 http://jsbin.com/zipivadu/10/edit
KeyDown - 物理的にキーを押したとき
KeyUp - 鍵を物理的に離したとき
KeyPress - 文字が入力されているように…KeyPressあなたが押し続けると複数回起動します鍵、他の人が一度だけ発射する場所。