onKeyPress Enterを押すと重複入力がブロックされます
5342 ワード
🤬 todolistが入力でenterを押したときに問題が発生しました
todolistでは、
input
にvalue
がない場合、TodoViewModel.addTodo
関数にalret
が表示されます.しかし、テキストを入力した後、Enterを押し続けた結果、次のような操作が行われました.
input
のvalue
がnull
になります.inputElement
は入力を継続し、onkeypressイベントを実行します.🧐 私が欲しいのは、Enterを押しても一度だけ運転してほしいことです...なぜずっと動いているのですか?
JavaScriptのキーボードイベントは3種類あります.
onKeyUp:キーがオフの場合
onKeyDown:keyの場合
onKeyPress:keyが押されている場合は、現在は推奨されていません.
<input
type="text"
value={TodoViewModel.createInputValue}
onChange={(e) => TodoViewModel.handleCreateInput(e.target.value)}
onKeyDown={(e) => e.key === 'Enter' && TodoViewModel.addTodo()}
autoFocus
/>
まず今はお勧めしないので、keyDownイベントに変更します.しかし、問題はまだ解決されていません.
したがって、最初にステータス値が生成され、
boolean
の値でsubmit
であるか否かが判断され、イベントの再実行が阻止される.ただしMVVMモードを適用して作成されたtodolsitなので、viewに変数を作成して論理を処理したり、viewモデルに論理を追加して重複入力を阻止したりするのは効率的ではありません.
解決策
blurイベントは1回のtodoが
submit
であり、入力焦点を外に除去することによって解決される..blur()は、すべての要素ではなくHTML要素にのみ存在することを保証するため、targetをHTML InputElementとして指定する必要があります.
<input
type="text"
value={TodoViewModel.createInputValue}
onChange={(e) => TodoViewModel.handleCreateInput(e.target.value)}
onKeyDown={(e) => {
if (e.key === 'Enter') {
(e.target as HTMLInputElement).blur();
TodoViewModel.addTodo();
}
}}
autoFocus
/>
Reference
この問題について(onKeyPress Enterを押すと重複入力がブロックされます), 我々は、より多くの情報をここで見つけました https://velog.io/@zhd5379/onKeyPress-Enter를-누르고-있을때-중복입력-막기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol