私はbootstrap 3ドキュメントのモーダル例を使用しています。モーダルは機能します。ただし、発生時にshow.bs.modalイベントにアクセスする必要があります。今のところ私はちょうどしようとしています:
$('#myModal').on('show.bs.modal', function () {
alert('hi')
})
何も起こらず、イベントは発生しません。私は何を間違えていますか???これは私には意味がありません。
これを使って:
$(document).on('show.bs.modal','#myModal', function () {
alert('hi');
})
モーダルをインスタンス化してポップアップする前に、必ずon('shown.bs.modal')
を配置してください
$("#myModal").on("shown.bs.modal", function () {
alert('Hi');
});
$("#myModal").modal('show'); //This can also be $("#myModal").modal({ show: true });
または
$("#myModal").on("shown.bs.modal", function () {
alert('Hi');
}).modal('show');
フィールドに集中するには、shown.bs.modal
の代わりにshow.bs.modal
を使用することをお勧めしますが、他の理由で、背景を非表示にしたり、モーダルが表示される直前に何かを設定したい場合は、 show.bs.modal
関数。
関数を$(document).ready(function() {
、またはより単純に$(function() {
でラップします。 CoffeeScriptでは、これは次のようになります
$ ->
$('#myModal').on 'show.bs.modal', (event)->
これがないと、ドキュメントがロードされる前にJavaScriptが実行され、#myModal
はまだDOMの一部ではありません。 ブートストラップリファレンス です。
これを試して
$('#myModal').on('shown.bs.modal', function () {
alert('hi');
});
shown
の代わりにshow
を使用すると、関数とアラートの最後にセミコロンがあることも確認してください。
$(document).on('shown.bs.modal','.modal', function () {
/// TODO EVENTS
});
同様のことが私に起こり、setTimeoutを使用して解決しました。
ブートストラップは、次のタイムアウトを使用して表示を完了しています。
c.TRANSITION_DURATION = 300、c.BACKDROP_TRANSITION_DURATION = 150、
したがって、300以上を使用する必要があり、私にとっては200が機能しています:
$('#myModal').on('show.bs.modal', function (e) {
setTimeout(function(){
//Do something if necessary
}, 300);
})
スクリプトを「js/bootstrap」の呼び出しの前ではなく後に配置することを忘れないでください。
私の場合、.modal-dialog divがありませんでした
イベントを起動しません:shown.bs.modal
<div id="loadingModal" class="modal fade">
<p>Loading...</p>
</div>
イベントを実行します:shown.bs.modal
<div id="loadingModal" class="modal fade">
<div class="modal-dialog">
<p>Loading...</p>
</div>
</div>
同様の問題がありましたが、$( '#myModal')を使用しても動作しません。 $(window)を使用すると、機能するようになりました。
私の他の問題は、モーダルdiv htmlコンテンツをjavascript変数などに保存した場合、showイベントが発生しないことを発見したことです。
var content="<div id='myModal' ...";
$(content).modal();
$(window).on('show.bs.modal', function (e) {
alert('show test');
});
発生しなかったため、イベントは発生しませんでした
私の修正は、HTML本文にdivを含めることでした
<body>
<div id='myModal'>
...
</div>
<script>
$('#myModal).modal();
$(window).on('show.bs.modal', function (e) {
alert('show test');
});
</script>
</body>
Bootstrapを使用する前に、jQueryをロードしていることを確認してください。基本的に聞こえますが、これらのモーダルイベントのキャッチに問題があり、エラーはコードではなく、jQueryの前にBootstrapをロードしていたことがわかりました。
これを追加:
$(document).ready(function(){
$(document).on('shown.bs.modal','.modal', function () {
// DO EVENTS
});
});
次の場合、これは機能しない場合があります。
1)$('#myModal').on('show.bs.modal'...)
を含む行の前にJavaスクリプトコードにエラーがあります。トラブルシューティングを行うには、ページの読み込み時に警告メッセージが表示されるかどうかを確認するために、行の前に警告メッセージを配置します。解決するには、上記のJSを排除して、どれが問題かを確認します
2)もう1つの問題は、JSを間違った順序でロードした場合です。たとえば、実際にJQuery.jsをロードする前に、$('#myModal').on('show.bs.modal'...)
部分を使用できます。その場合、呼び出しは無視されますので、最初にHTML(ページソースを確認)で、JQueryへのスクリプトリンクがモーダルonShow
呼び出しの上にあるかどうかを確認してください。そうでない場合は無視されます。トラブルシューティングを行うには、前のショーをオンにしてアラートを入れます。 onShow関数内ではなく、前のものが表示される場合、その関数が実行できないことは明らかです。スペルが正しい場合、JQuery.jsへの呼び出しが行われないか、onShow
部分の後に行われます
私の場合、問題はtravelsizeのコメントです。bootstrap.jsとjqueryの間のインポートの順序。私はテンプレートMetronicを使用しており、以前にチェックしていないため
詳細は次のとおりです。
show.bs.modalは動作しますが、モデルダイアログのロードはshown.bs.modalが動作して、ロード後に何かを実行します。レンダリング後
他のjqueryモーダルではなく、実際にbootstrap jqueryモーダルを使用していることを確認してください。
これで時間を無駄にしすぎて...