Twitter Bootstrapでモーダル終了イベントを処理する方法は?


191

Twitterブートストラップで、モーダルのドキュメントを確認します。モーダルのcloseイベントをリッスンして関数を実行する方法があるかどうか、わかりませんでした。

たとえば、このモーダルを例に取ってみましょう:

<div class="modal-header">
    <button type="button" class="close close_link" data-dismiss="modal" aria-hidden="true">&times;</button>
    <h3>Modal header</h3>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
    <a href="#" class="btn close_link" data-dismiss="modal">Close</a>   
</div>

上にあるXボタンと下にある閉じるボタンの両方で、モーダルを非表示/閉じることができますdata-dismiss="modal"。それで、どういうわけかそれを聞くことができたのでしょうか?

あるいは、私はこのように手動でそれを行うことができたと思います...

$("#salesitems_modal").load(url, data, function() { 
     $(this).modal('show'); 
     $(this).find(".close_link").click(modal_closing);
});

どう思いますか?


回答:


369

Bootstrap 3および4用に更新

Bootstrap 3およびBootstrap 4のドキュメントでは、使用できる2つのイベントを参照しています。

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

そして、それらを使用する方法の例を提供します。

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

Legacy Bootstrap 2.3.2の回答

Bootstrapのドキュメントには、使用できる2つのイベントが記載されています。

hide:このイベントは、インスタンスの非表示メソッドが呼び出されるとすぐに発生します。
hidden:このイベントは、モーダルがユーザーから非表示にされたときに発生します(CSS遷移が完了するまで待機します)。

そしてそれらを使用する方法の例を提供します:

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

1
何らかの理由で、これは、モーダルにあるボタンからマウスアウトしたときにも発生します。モーダルでフォームを送信したとき(onSubmitイベントが発生する前でも)。誰かがこの行動を止める方法を知っていますか?
Guy

2
追加のコンテキストを提供するには、$(document).on( 'hidden'、 '#myModal'、function(){//何かをする});を使用することをお勧めします。これが$(document).ready関数宣言内に含まれている場合など、特定の状況でこれが機能しないのを防ぐため。
Gareth Daine、2015年

こんにちは、私はモーダル非表示jqueryを適用したいと思います。プロジェクトに同じコードを適用しましたが、機能しません。同じことについて何か提案はありますか?
Hardi Shah

@HardiShah、コードやエラーを含む新しい質問をする必要があります。
albertedevigo 2017年

67

モーダルdivが動的に追加される場合は、(ブートストラップ3の場合)を使用します

$(document).on('hide.bs.modal','#modal-id', function () {
                alert('');
 //Do stuff here
});

これは動的でないコンテンツでも機能します。


非表示と非表示の違い??
Mahi

3
@mahi .hideイベントは、インスタンスの非表示メソッドが呼び出されるとすぐに発生します。一方、非表示イベントは、モーダルがユーザーから非表示にされたときに発生します(CSS遷移が完了するまで待機します)。
混乱

18

モーダルイベントには2つのペアがあり、1つは「表示」と「表示」、もう1つは「非表示」と「非表示」です。名前からわかるように、非表示イベントは、右上隅の十字ボタンまたは閉じるボタンをクリックするなど、モーダルが間近であるときに発生します。非表示は、モーダルが実際に閉じた後に発生します。これらのイベントを自分でテストできます。試験の場合:

$( '#modal' )
   .on('hide', function() {
       console.log('hide');
   })
   .on('hidden', function(){
       console.log('hidden');
   })
   .on('show', function() {
       console.log('show');
   })
   .on('shown', function(){
      console.log('shown' )
   });

そして、あなたの質問については、あなたのモーダルの「隠す」イベントを聞くべきだと思います。


1

ブートストラップモーダルイベント:

  1. hide.bs.modal =>モーダルが非表示にされるときに発生します。
  2. hidden.bs.modal =>モーダルが完全に非表示になったときに発生します(CSSの移行が完了した後)。
<script type="text/javascript">
    $("#salesitems_modal").on('hide.bs.modal', function () {
        //actions you want to perform after modal is closed.
    });
</script>

これがお役に立てば幸いです。

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