関数をTwitter Bootstrap Modalにバインドする


530

私は新しいプロジェクトでTwitter Bootstrap libを使用していて、ページの一部で最新のjsonデータをモーダルクローズで更新して取得したいと考えています。ドキュメンテーションのどこにもこれが見当たらないので、誰かが私に指摘したり、解決策を提案したりできます。

文書化された方法の使用に関する2つの問題

 $('#my-modal').bind('hide', function () {
   // do something ...
 });

モーダルに「非表示」クラスをすでにアタッチしているため、ページのロード時に表示されず、2回ロードされます。

非表示クラスを削除して要素IDをに設定し、上記の関数にdisplay:none追加console.log("THE MODAL CLOSED");しても、閉じると何も起こりません。

回答:


1139

ブートストラップ3&4

$('#myModal').on('hidden.bs.modal', function () {
    // do something…
});

ブートストラップ3:getbootstrap.com/javascript/#modals-events

ブートストラップ4:getbootstrap.com/docs/4.1/components/modal/#events

ブートストラップ2.3.2

$('#myModal').on('hidden', function () {
    // do something…
});

getbootstrap.com/2.3.2/javascript.html#modals→イベントを参照してください


1
これは、何らかの理由で、モーダルフッターのボタンの上にカーソルを置いたときにも起動することを除いて、機能するようです。ボタンは通常の送信ボタンです:<input type = "submit" class = "btn btn-info" value = "Go" />カーソルを置いたときに非表示イベントを発生させない方法はありますか?または、ホバーのために発砲されたことをどのように検出できますか?ところで:イベントが発生しても、モーダルダイアログは閉じません。
2013年

2
Bootstrap 3でこの動作が見られないのですが、いじることはできますか?
sp00n 2013

7
この回答では、hidden.bs.modalとhide.bs.modalの違いについておそらく言及する必要があります。非表示はCSSアニメーションが完了すると発生しますが、私のテストでは、アニメーションがない場合は発生しません(ただし、バグの可能性があります)。データ管理を使用している場合は、代わりにhide.bs.modalを使用する方が安全です。これは、.modal( 'hide')が呼び出されるとすぐに起動されます。 getbootstrap.com/javascript/#modals-usage-イベントサブセクションをご覧ください。
Evan Steinkerchner、2014

2
ブートストラップ3:(data-dismiss="modal"閉じるボタンのように)とマークされたモーダルタグをクリックすると機能しますが、モーダルを囲む黒い背景領域をクリックすると機能しません。モーダルは閉じられますが、ページが更新されるまで再度開くことはできません。私は両方'hidden.bs.modal'を試しました'hide.bs.modal'が、役に立ちませんでした。
マルキート2015

5
@marquitoあなたができること(私がすること)は次のように使用します:こうすること$('#myModal').modal({ backdrop: 'static', keyboard: false });で、モーダルは、灰色の領域をクリックしても、Escキーを押しても閉じません。
aesede

123

ブートストラップ4

$('#my-modal').on('hidden.bs.modal', function () {
  window.alert('hidden event fired!');
});

実際の例については、このJSFiddleを参照してください。

https://jsfiddle.net/6n7bg2c9/

ここのドキュメントのモーダルイベントセクションを参照してください:

https://getbootstrap.com/docs/4.3/components/modal/#events


1
コールバックのこのタイプを実装するために探して、この記事を見つけた人にとって、この機能が含まれてブートストラップの拡張モジュールだけでなく、動的に作成するダイアログ/警告/確認のための他の有用な機能がたくさんある:bootboxjs.com
jkriddle

以下の@Ricardo Limaの応答は、jQuery / bootstrapでイベントを監視するための正しい方法になりました
sbonami

@meatballsは、実際の例に賛成票を投じています。
スティーブンパッテン2013年

@ 100acrewood Dude、これで見つけた!ありがとうございました!re:bootboxjs.com
スティーブンパッテン

46

Bootstrap 3編集:Bootstrap 4でも同じ)を開始すると、イベントを起動できるインスタンスが2つあります。

1. モーダル「非表示」イベントが開始したとき

$('#myModal').on('hide.bs.modal', function () { 
    console.log('Fired at start of hide event!');
});  

2. モーダル「非表示」イベントが終了したとき

$('#myModal').on('hidden.bs.modal', function () {
    console.log('Fired when hide event has finished!');
});

参照:http : //getbootstrap.com/javascript/#js-events


1
これは、ブートストラップモーダルのバグを修正するのに役立ちました。モーダルのクローズ時に、本体に15pxのパディング権利が追加されます。ありがとう!
Sam Malayek 2017年

2
2つのイベントを表示するのに適しています。イベントを発生させるには、これをモーダルの下に配置する必要があることに注意してください。
Lynnell Emmanuel Neri 2017

18

「ライブ」の代わりに「オン」イベントを使用する必要がありますが、それをドキュメントオブジェクトに割り当てます。

使用する:

$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});

1
これは、モーダルが動的に追加される場合に行う必要がある方法です。時間を大幅に節約できました。
ディランヴァンダーバーグ

15
$(document.body).on('hidden.bs.modal', function () {
    $('#myModal').removeData('bs.modal')
});

6

ブートストラップは、モーダルにフックできるイベントを提供します。たとえば、モーダルがユーザーから非表示にされたときにイベントを発生させたい場合は、次のように hidden.bs.modalイベントを使用できます。

    /* hidden.bs.modal event example */
    $('#myModal').on('hidden.bs.modal', function () {
          window.alert('hidden event fired!');
    })

ここで動作するフィドルを確認してください。モーダルメソッドとイベントの詳細については、こちらのドキュメントをご覧ください。


4

ブートストラップ4:

$('#myModal').on('hidden.bs.modal', function (e) {
   // call your method
})

hide.bs.modal:このイベントは、インスタンスの非表示メソッドが呼び出されるとすぐに発生します。

hidden.bs.modal:このイベントは、モーダルがユーザーから非表示にされたときに発生します(CSSの移行が完了するまで待機します)。


この方法はBS3にも有効です。BS2(非推奨)の方法については、承認済みの回答を参照してください。
ローランド

3

私はそれをこのようにします:

$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });

残りはすでに他の人によって書かれています。また、ドキュメントを読むことをお勧めします:jquery-on method


2

hide.bs.modalモーダルが閉じたときにトリガーされるなど、ブートストラップイベントに関する多くの回答を見てきました。

これらのイベントには問題があります。モーダル内のポップアップ(ポップオーバー、ツールチップなど)がそのイベントをトリガーします。

モーダルが閉じたときにイベントをキャッチする別の方法があります。

$(document).on('hidden','#modal:not(.in)', function(){} );

ブートストラップは、inモーダルが開いているときにクラスを使用します。イベントがトリガーされたときにhiddenクラスinがまだ定義されているため、イベントを使用することは非常に重要hideです。

IE8はJquery :not()セレクターをサポートしていないため、このソリューションはIE8では機能しません。


2

私はいくつかと同じ問題を抱えていました

$('#myModal').on('hidden.bs.modal', function () {
// do something… })

これをページの下部に配置する必要があります。上部に配置してもイベントは発生しません。


確かに。イベントを発生させるには、モーダルの下に配置する必要があると述べたのは良いことです。
Lynnell Emmanuel Neri 2017

私はそれよりも少し厳しいルールを定義します。jQueryセレクター$("#myModal")が呼び出されると、IDのHTML要素myModalがDOMに存在する必要があります。したがって、このコードをページの上部に配置することもできますが、その中に配置することもできます$(document).on("ready", function(){ ... });(または、DOMに要素が入力された後に呼び出される同様の関数)。
Andy Gee

0

すべてのモーダル終了で関数を実行したい場合は、このメソッドを使用できます。

$(document).ready(function (){
    $('.modal').each(function (){
        $(this).on('hidden.bs.modal', function () {
            //fires when evey popup close. Ex. resetModal();
        });
    });
});

したがって、毎回モーダルIDを指定する必要はありません。

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