表示後のブートストラップモーダルで最初のテキスト入力にフォーカスを設定する方法


116

動的ブートストラップモーダルをロードしますが、テキスト入力がほとんどありません。カーソルがこのモーダルの最初の入力にフォーカスするようにしたいという問題に直面していますが、これはデフォルトでは発生しません。
だから私はそれを行うためにこのコードを書きました:

$('#modalContainer').on('show', function () {
   $('input:text:visible:first').focus();
});

しかし今、それはしばらくの間入力に焦点を合わせ、その後自動的に消えます、なぜこれが起こっているのか、そしてどのように解決しますか?


2
jsfiddle.netでデモを提供できますか?
未定義

タイムアウトを設定してみてください。何か他のものが干渉している可能性があります。setTimeout(function() { /* Your code */ }, 100);
qwerty 2013年

これを試してくれませんか... var index = 0; $( '#modalContainer')。on( 'show'、function(){index = 1;}); if(index){$( 'input:text:visible:first')。focus(); }
chirag ghiyad 2013年

回答:


186

@scumahがあなたのための答えを持っています:Twitterブートストラップ-クリックでモーダル内の textareaに焦点を当てます

Bootstrap 2の場合

modal.$el.on('shown', function () {
$('input:text:visible:first', this).focus();
});  

更新:Bootstrap 3の場合

$('#myModal').on('shown.bs.modal', function () {
    $('#textareaID').focus();
})  

==========更新======

質問に対して、異なるデータターゲットを指定し、モーダルIDの名前を変更してフォーム入力フィールドのIDを更新し、最後にJSを更新してこれらの新しいID:http : //jsfiddle.net/panchroma/owtqhpzr/5/を
参照

HTML

...
<button ... data-target="#myModal1"> ... </button> 
... 
<!-- Modal 1 -->
<div class="modal fade" id="myModal1" ...>
... 

<div class="modal-body"> <textarea id="textareaID1" ...></textarea></div>

JS

$('#myModal1').on('shown.bs.modal', function() {
  $('#textareaID1').focus();
})

これはページに1つのモーダルがある場合にのみ機能しますか?複数の場合はどうなりますか?
Ramesh Pareek、

素早い反応!私は愚かなエラーを犯しました、今すぐ動作します!
Ramesh Pareek、

+1これを機能させるために1時間近く試した後、あなたの回答を読んだときにコードを「表示」から「表示」に変更しました。
Exel Gamboa

これにより、jquery検証が発生したときに最大のコールスタックエラーが発生します。したがって、これは私には役に立たない。
Vandita

@Vandita、あなたがcodepen.ioでペンを開始したい場合、あなたが説明する問題を説明します。私がそれを見て喜んでいます。
David Taiaroa

80

私は、jQueryなしでこれを行う最善の方法を見つけました。

<input value="" autofocus>

完璧に動作します。

これはhtml5属性です。すべての主要なブラウザでサポートされています。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input


:それは(またはハンドラをクリック)必要がありますどのようにこの作業を取得しようとしているカップルの時間を過ごした後、私はHTML5のオートフォーカス属性である作品があること1つの方法だけ見つける<input type="text" class="form-control" placeholder="" autofocus>
lots0logs

1
ここでは、MVC3コントロールでそれを行うことができる方法である: @Html.TextBoxFor(m => m.UserName, new { @autofocus="" })
ノミ

19
それは私にはうまく
いき

オートフォーカスを使用しているときにブートストラップモーダルが表示された後、私も少しの間、入力ゲインフォーカスを確認します。ただし、入力はフォーカスを失います。.on()ハンドラーを実装する必要がありました。
raddevus

7
これtabdindex="-1"は、モーダルから削除した場合に機能しますが、機能するのは1回だけです。閉鎖と再開は焦点を当てていません。
Memet Olsen 2017

42

David Taiaroaの答えは正しいですが、モーダルを「フェードイン」する時間では入力に焦点を合わせることができないため、機能しません。遅延を作成する必要があります:

$('#myModal').on('shown.bs.modal', function () {
    ...
    setTimeout(function (){
        $('#textareaID').focus();
    }, 1000);

})

2
ここにいるのはあなただけです。あなたの解決策が機能する唯一のものです。timeOutに小さい値を設定しようとしましたが、機能しませんでした。1000msでモーダル「読み込みが終了」しているようです:(
Enrique

1
ええ、でも今日は、私の新しいプロジェクトで、<input value="" autofocus>今回使用し、うまく
いきました。

3
正しいのは、showned.bs.modalイベントを使用することです。getbootstrap.com/ javascript

2
setTimeout()を使用する代わりに、次のようにdelay()を使用できます... $( '#textareaID')。delay(1000).focus()。select();
トニー

間違いなく修正ソリューション。
フランクトーマス

18

以下の通常のコードは私に機能しません:

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})

私は解決策を見つけました:

$('body').on('shown.bs.modal', '#myModal', function () {
    $('input:visible:enabled:first', this).focus();
})

もっと見るこちら


9

ブートストラップのページに次の情報が追加されました。

HTML5がそのセマンティクスを定義する方法が原因で、autofocus HTML属性はBootstrapモーダルでは効果がありません。同じ効果を得るには、いくつかのカスタムJavaScriptを使用します。

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})

http://getbootstrap.com/javascript/#modals


7

これは、任意の入力フィールドを持つすべてのポップアップでフォーカスすることで最適に機能する単純なコードです

$(".modal").on('shown.bs.modal', function () {
    $(this).find("input:visible:first").focus();
});

4

jQueryの使用を想定した場合の最も正しい答えは、このページのすべての回答の側面を統合し、さらにBootstrapが渡すイベントを使用することです。

$(document).on('shown.bs.modal', function(e) {
  $('input:visible:enabled:first', e.target).focus();
});

次のように、このフォーカスが発生する必要があることを通知するクラスをモーダルに変更$(document)$('.modal')たり、モーダルに追加したりすることもできます。$('.modal.focus-on-first-input')


2
これは、私がここで見た中で最も優れた、最も一般的なソリューションです:)
Martin T.

読み取り専用のテキストボックスも無視したい場合は、次のように変更して読み取ります:$( 'input:visible:enabled:not([readonly]):first'、e.target).focus();
ダグラスティムズ

3

このコードを試してください、それはあなたのために働くかもしれません

$(this).find('input:text')[0].focus();

1
これが私が使用するものです:$(this).find('input:text').first().focus()
Jimmy

1

最初のステップでは、autofocusフォーム入力に属性を設定する必要があります。

<input name="full_name" autofocus/>

そして、モーダルが表示された後、入力のオートフォーカスを設定する宣言を追加する必要があります。
このコードを試してください:

$(document).on('ready', function(){
    // Set modal form input to autofocus when autofocus attribute is set
    $('.modal').on('shown.bs.modal', function () {
        $(this).find($.attr('autofocus')).focus();
    });
});

$(this).find( '[autofocus]')。focus();を使用しました そして、それは機能します
SummerRain '29年

0

開いていた任意のモーダルを自動でフォーカスしたい場合は、パターンまたはlib関数を最初の入力に焦点を合わせるこのスニペットを配置できます。

$('.modal').on('shown.bs.modal', function () {
  $(this).find('input:first').focus();
})

0

すべてのモーダルで機能するスニペットを探しており、開いているものの最初の入力テキストを自動的に検索する場合は、次のように使用します。

$('.modal').on('shown.bs.modal', function () {
    $(this).find( 'input:visible:first').focus();
});

モーダルがajaxを使用してロードされている場合は、代わりにこれを使用してください:

$(document).on('shown.bs.modal', '.modal', function() {
    $(this).find('input:visible:first').focus();
});

0

これが最も一般的な解決策です

$('body').on('shown.bs.modal', '.modal', function () {
    $(this).find(":input:not(:button):visible:enabled:not([readonly]):first").focus();
});
  • ページの読み込み後にDOMに追加されたモーダルで動作します
  • ボタンではなく、入力、テキストエリア、選択で動作します
  • 非表示、無効、読み取り専用を省略
  • 色あせたモーダルで動作し、setIntervalは不要

0

入力/テキストボックスが開いているときに、モーダルのtabIndexプロパティ削除してみてください。input / textboxを閉じるとき元の状態に戻します。これにより、ユーザーエクスペリエンスのフローを損なうことなくブートストラップのバージョン関係なく問題が解決されます


0

Bootstrap 4のドキュメントによると:

HTML5がそのセマンティクスを定義する方法が原因で、autofocus HTML属性はBootstrapモーダルでは効果がありません。同じ効果を得るには、カスタムJavaScriptを使用します。

例えば:

$('#idOfMyModal').on('shown.bs.modal', function () {
    $('input:first').trigger('focus')
});

リンク


0

オートフォーカスを使用して、適切なフォーム要素を検索します。

$('.modal').on('shown.bs.modal', function() {
  $(this).find('[autofocus]').focus();
});

-1
$(document).ready(function() {
  $("#button").click(function() {
    $('#mymodal').on('shown.bs.modal', function() {
      $('#myinput').focus();
    })
  });
});
  • モーダルフォームを呼び出すのは「#button」です。

  • 「#mymodal」はモーダルフォームです。

  • 「#myinput」は、フォーカスを取得する入力です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.