2013-10-30 35 views
18

javascript modal of bootstrap3でコールバック関数を起動するとちょっと混乱します。通常jquery.postでは、あなたはそれをのように、bootstrap3のモーダルでコールバック関数

$.post('path', { something: something }, function(data) { 
    console.log(data); 
}); 

を行うことができます。しかし、ブートストラップ3モーダルに私はスクリプトを使用してモーダルを起動し、私は彼らのウェブサイトでの説明を理解する方法については、この基本のようにそれを行います。

$('selector').modal('show', function() { 
    //here comes the problem, I have a button in the modal in the html, my code 
    //if the button was clicked inside this modal is.. 

    $('#myButton').on('click', function() { 
    console.log("this is a try"); 
    }); 
}); 

しかし、私がボタンをクリックすると何も起きていない、何もコンソールに記録されていないと言うのは悲しいことです。ブートストラップ3のモーダルでコールバック関数を呼び出すにはどうすればよいですか?

ブートストラップ3については

答えて

24

は、イベントは今名前空間されているので、モーダル用showイベントが... show.bs.modalだろう

$('#myModal').on('show.bs.modal', function (e) { 
    alert('modal show'); 
}); 

デモ:第一の答えを追加することがほんの少しhttp://bootply.com/90952

+0

でそれをラップし、これを向上させることができますか? –

+1

3.3.1で動作しないのは何ですか? http://bootply.com/zCGQs1Zbta – ZimSystem

+0

申し訳ありませんが、私にとって初めての仕事はありませんでしたが、これはボタンをクリックしてこれを有効にするためだと思いますが、今はクリックとイベントに分割しました。 –

11

なぜなら、コールバックがトリガされると、モーダル内のDOMはまだ完全にロードされていないため、しばらくの間コールバックの後でアクションを保留するために少しハックする必要があるからです。それが役に立てば幸い!

$('#myModal').on('show.bs.modal', function (e) { 
    setTimeout(function(){ 
     // something here 
    }, 300); 
}); 
+0

タイムアウトは私の人生を救う! – Nantaphop

11

@Skelly権利である、あなたはこのようなshow.bs.modalイベント使用することができます。

$('#myModal').on('show.bs.modal', function (e) { 
    alert('modal show'); 
}); 

を公式ドキュメントは言う:

ショーインスタンスメソッドが呼び出されたときに、このイベントはすぐに起動します。

このイベントは「すぐに」解消されるため、代わりにshown.bs.modalを使用する必要があります。このイベントについて

ドキュメント:

モーダルは、ユーザーに表示行われたときに、このイベントが発生し(CSSの遷移が完了するのを待ちます)。

この影響は答える@Keith yeoh'sあなたはタイムアウト可能性を避ける必要があります。

出典: Official Bootstrap documentation

+4

'show.bs.modal'は私にとってはまったく動作しませんでした。 'shown.bs.modal'を使って私のための修正プログラムでした。ありがとう! – regularmike

+0

モーダルがオープニングを終了すると 'shown'が呼び出され、オープニングを開始すると' show'が呼び出されます。これは予期せぬ動作であり、お互いのエイリアスではないので、なぜ動作しなかったのかを理解する必要があります。 – SISYN

+1

show.bsとshowN.bsにこの小さなNがあります。ドキュメンテーションのヒントありがとう! ;) – Soley

4

私はより良いモーダルが出回っロードされたとき、それがfieredされる「shown.bs.modal」を使用して、になると思います。 Bootstrap modal events

$('#myModal').on('shown.bs.modal', function (e) { 
    alert('modal is allready shown'); 
}); 
+0

それは受け入れられた答えでなければなりません:) – JCarlos

+0

まさに!ショーは、モーダルが表示され始めたときに表示されます – Artur79

0

これはバージョン3.3.1で私のために動作しません

$(window).on('load', function() { 
    ...modal callback here. 
}); 
関連する問題