私はhtmlフォームを持っています。
- 「Enter」キーを含むフィールド間を移動するには、キーボード ナビゲーション (矢印キーを使用) を使用します。
- 情報を受け入れるようにユーザーに定期的に促す必要があります。
- Enter キーは、ボタンとフォーム フィールドの両方で取得されます。
問題: ユーザーが同意ボタンで「ENTER」を押すと、フォームで 2 つのイベントがトリガーされます。フォーカスを 1 フィールドではなく 2 フィールドシフトします。
ここで話していることを正確に示すコードがあります。
元の投稿http://jsfiddle.net/mcraig_brs/UgUUr/1/
変更された投稿http://jsfiddle.net/mcraig_brs/UgUUr/2/
サンプル HTML は次のとおりです。
<button id="myButton">Press Enter On Me</button><br>
<input type="text" id="text1" class="tInput" data-index="0"><br>
<input type="text" id="text2" class="tInput" data-index="1"><br>
<input type="text" id="text3" class="tInput" data-index="2"><br>
<div id="log"></div>
サンプル JS は次のとおりです。
function log ( data ) {
$('#log').append(data + "<br>");
}
function focusOn(index) {
log("focusOn(index): " + index);
$('input.tInput').eq(index).focus();
}
function focusNext( currentIndex ) {
log("focusNext(currentIndex):" + currentIndex);
focusOn(currentIndex + 1);
}
function focusPrevious (currentIndex) {
log('focusPrevious(currentIndex):' + currentIndex);
focusOn(currentIndex - 1);
}
$('#myButton').on('click', function(e) {
log("event:click #myButton");
focusOn(0);
});
$('input.tInput').on('keyup', function(e) {
switch (e.which) {
case 13:
log("event:ENTER key in input.tInput");
focusNext($(this).data('index'));
break;
case 38:
log("event:UP ARROW key in input.tInput");
focusPrevious($(this).data('index'));
break;
case 40:
log('event:DOWN ARROW key in input.tInput');
focusNext($(this).data('index'));
break;
}
});
現在のコードのボタンにフォーカスがあるときに「ENTER」を押すと、ログ div に次の出力が表示されます。
event:click #myButton
focusOn(index): 0
event:ENTER key in input.tInput
focusNext(currentIndex):0
focusOn(index): 1
(現時点では、jsFiddle でボタンにアクセスできる唯一の方法は、最初のテキスト フィールドにフォーカスし、「Shift + Tab」でそこに戻ってフォーカスを移動し、「ENTER」を押すことができるようにすることです。しかし、ライブコードは自動的にユーザーにフォーカスされます。)
質問: このタイプのダブル イベントがトリガーされないようにするにはどうすればよいですか? e.stopPropagation() を試しましたが、探していた結果が得られませんでした。ユーザーが「ENTER」を押したときに、フォーカスを1フィールドだけ進めたい。
私はこれに数日間取り組んでいるので、どんな助けも大歓迎です. ユーザーがマウスでボタンをクリックすると、ボタンは正しく機能しますが、ダブル イベントをトリガーするのは ENTER キーのみであることに注意してください。
注:制約をよりよく伝えるために、質問を少し変更する必要がありました。