質問: keyCode; //jQuery $('#input_num').val(keyCode); ``` フォーカス設定時イベント ------------ モーダルの表示完了時に``にフォーカスをあてている箇所があり この一行をコメントアウトしたところ数字が自動セットされなくなったので フォーカスイベントが関係しているのは間違いなさそうなのですが `focusin`などのキーワードで全検索してもそれらしい箇所はなさそうでした。 ``` $('#モーダルのID').on('shown.bs.modal', function(event) { $('#input_num').focus(); }); ``` ### 2017/12/4追記 以下のように`#any_input`を追加し、`#any_input`にフォーカスをあてるよう処理を変更すると 入力した数字は`#any_input`にセットされました。 しかし、フォーカスのあたっている要素を取得する`document.activeElement`は使っていませんでした。 ``` ``` setInterval、setTimeout ---------------------- 数字キーは3桁程度なら連続して入力できるので `setInterval`や`setTimeout`を使っているのかと思いましたが それらしい箇所はありませんでした。
回答: Bootstrapについては全く知らないことを前置きしておきます. 質問の内容を正確に読み取れていないため, 次のことが知りたいものとして回答します. 「提示したコードでは`input_num`に値を設定していないように見えるにもかかわらず, キー入力値がそこに反映される」 なんというか, 当たり前のことを深く考えすぎているように見えます. コードを見て下さい. ``` $(function() { //モーダルの表示が完了したとき $('#modal').on('shown.bs.modal', function(e) { var target = document.getElementById('input_num'); target.value = target.value; var len = target.value.length; target.focus(); target.setSelectionRange(len, len); }); //画面上でキー入力を行ったとき $(document).keydown(function(e) { //入力値によって分岐 //0~9の場合 dispModal(e); }); }); function dispModal(e) { //各種チェック処理、JavaBeans更新処理 //モーダル起動 $('#modal').modal('show'); } ``` もし`input_num`にフォーカスが当たっていなかったとしましょう.ここでキー入力を行うと次の処理フローが発生します. 1. `document`が`keydown`イベントをキャッチし, `$(document).keydown(function(e)〜`部のコードが実行される. 2. `dispModal(e)`が実行される. 3. `$('#modal').modal('show');`が実行されモーダルが表示される. 4. `$('#modal').on('shown.bs.modal', function(e)〜`部のコードが実行される. 5. `input_num`が検索され, フォーカスをそこに移動する. 6. その結果, フォーカスが当たっている`input_num`に`keydown`時のキーコードが挿入される. 敢えて言うならば「`input_num`が検索され, フォーカスをそこに移動する」処理がキー入力が行われている直接的なコードです. ここで素早く3回キー入力すると, モーダルが表示される**前**(キー入力が無効化される前)に`keydown`イベントが3回発生し, モーダルの表示処理が**3回呼び出され**, 結果`input_num`に3つの文字が出力されます. で, この動作が**「正しい動作」なのか「意図しない動作」なのかについて, あなたは一切言及していない**ためこれ以上のアドバイスはできません.