ブートストラップモーダルオープンで関数を呼び出す


179

以前はJQuery UIのダイアログを使用していましたopenが、ダイアログが開かれたときに実行するJavascriptコードを指定できるオプションがありました。私はそのオプションを使用して、私が持っている関数を使用してダイアログ内のテキストを選択しました。

今、私はブートストラップのモーダルを使用してそれをしたいです。以下はHTMlコードです。

<div id="code" class="modal hide fade">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h3>Modal header</h3>
    </div>
    <div class="modal-body">
        <pre>
print 'Hello World'

そして、モーダルを開くボタンについては:

 <a href="#code" data-toggle="modal" class="btn code-dialog">Display code</a>

ボタンのonclickリスナーを使用しようとしましたが、モーダルが表示される前に警告メッセージが表示されました。

$( ".code-dialog" ).click(function(){
    alert("I want this to appear after the modal has opened!");
});

3
shown.bs.modalイベントは、HTMLドキュメントに少なくとも<div class="modal fade"><div class="modal-dialog"></div></div>構造が含まれている場合に発生します。
ケミカルプログラマー、


コメント@Chemical Programmerに挨拶します。回答とともに表示されます
Tarek

回答:


331

必要なものに基づいて、showed event / show eventを使用できます。

$( "#code" ).on('shown', function(){
    alert("I want this to appear after the modal has opened!");
});

デモ:プランカー

Bootstrap 3.0のアップデート

Bootstrap 3.0では、表示されたイベントを引き続き使用できますが、次のように使用します。

$('#code').on('shown.bs.modal', function (e) {
  // do something...
})

こちらの「イベント」の下にあるBootstrap 3.0ドキュメントを参照してください


17
$("#code").on("shown.bs.modal", function(e) {})ブートストラップ3.0に使用します。
teewuane 2014年

少なくともこのコードを呼び出すには、<div class = "modal fade"> <div class = "modal-dialog"> </ div> </ div>構造が必要だとケミカルプログラマが言ったことを必ず考慮してください
ワイオズ

1
#codejQueryのセレクタ、jQueryのための基本的な成分の一つを指す:w3schools.com/jquery/jquery_selectors.asp
DDW

$(document).on("shown.bs.modal", ...は全体的なリスニングに使用しています
vladkras 2017

1
少なくともモーダルが表示される前に、showned.bs.modalが実際に実行されます。これは私の場合問題ではありませんが、知っておくと良いでしょう。
ジョニー

86

動作しません。$(window)代わりに使用してください

上映用

$(window).on('shown.bs.modal', function() { 
    $('#code').modal('show');
    alert('shown');
});

非表示にする

$(window).on('hidden.bs.modal', function() { 
    $('#code').modal('hide');
    alert('hidden');
});

5
$( "#modal").on( 'shown'、function(){alert( "これは、モーダルが開いた後に表示されます!");}機能しませんでしたが、$(ウィンドウ)は機能しました!!ありがとう@viper_tkd
Krutal Modi

1
特定のセレクターではなく、開いたり閉じたりする任意のモーダルにバインドする必要がありました。その場合、この答えは私にはうまくいきました。
ジョセフ

これは、モーダルがGUIに完全にロードされる前に機能します。モーダルが読み込まれた後、モーダルからデータを取得したい-モーダルGUIがまだ存在しないため、このメソッドはすべてに対して「未定義」を返し、フィールドやその他すべてはまだクエリできません。(非表示)
FrenkyB 2018年

これでうまくいきましたがif( $('#code').is( e.relatedTarget ) ) { ... }、ページに複数のモーダルがあるため、特定のモーダルをターゲットにするチェックをハンドラー内に追加しました。
アリカン

正しいイベント名に感謝しますが、$(window)の要素IDを置き換える必要はありません。jquery 3.4でのbs4の使用。
Jcc.Sanabria

17

モーダルを開いた後ではなく、モーダルを開く直前に関数をロードするshow代わりに使用できますshown

$('#code').on('show.bs.modal', function (e) {
  // do something...
})

9

ブートストラップモーダルはイベントを公開します。shownこのようなイベントを聞いてください

$('#my-modal').on('shown', function(){
  // code here
});

0

誰かがまだ問題を抱えている場合、(loaded.bs.modal)を使用することで私にとって完璧に機能する唯一のものは:

 $('#editModal').on('loaded.bs.modal', function () {
       console.log('edit modal loaded');

       $('.datepicker').datepicker({
            dateFormat: 'yy-mm-dd',
            clearBtn: true,
            rtl: false,
            todayHighlight: true,
            toggleActive: true,
            changeYear: true,
            changeMonth: true
        });
});

-4

ブートストラップモデルの表示と非表示にbelwコードを使用できます。

$('#my-model').on('shown.bs.modal', function (e) {
  // do something here...
})

モデルを非表示にする場合は、以下のコードを使用できます。

$('#my-model').on('hidden.bs.modal', function() {
    // do something here...
});

この回答があなたのプロジェクトに役立つことを願っています。


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