それぞれ「1」と「2」という名前のスパンとテキスト入力が隣り合っています。一度に表示されるのは 1 つだけです。「one」をダブルクリックすると、「two」をフォーカスしたまま非表示になります。「二」をぼかすと隠れて「一」を見せる。エンターキーを押したときに「2」をぼかしようとすると、問題が発生します。ここに私が持っているものがあります:
.bind({'blur keyup': (function(e){
if(e.type === 'keyup' && e.keyCode !== 10 && e.keyCode !== 13) return;
$([this,$(this).prev()]).toggle(); })
})
Enter キーを押すとトグルが発生しますが、どこかをクリックすると再び起動します。ぼやけたように見えますが、「2」はフォーカスを保持しています。 これは、2 つのリスナー (キーアップとブラー) が分離されているフィドルと、何が起こっているかを強調するのに役立つ追加のフィドルです。
私は試した
- 追加
e.preventDefault()
- 追加
return false
(ぼかしの前) --> 残りの関数を強制終了します (予想どおり) - 追加
return false
(ぼかし後) --> エンターキー (??) を無効にするか、または後:- keyup:
(return function(e){
--> jQuery はこの構文を好みません
- keyup:
- 別の関数で .toggle() を実行 --> 次の場合を除き、違いはありません:
setTimeout
(時間が 0 の場合でも) --> 問題がなくなる
- 別のリスナーを使用する (key[down/press]) --> 違いなし
- 別の関数を呼び出す -> 違いはありません
質問: どうすればこれを修正できますか? 予想される動作は、Enter キーを押すと、 blur と同じアクションが得られることです。