ブートストラップ 3 ドキュメントのモーダルの例を使用しています。モーダルが動作します。ただし、発生時に show.bs.modal イベントにアクセスする必要があります。今のところ私はただ試しています:
$('#myModal').on('show.bs.modal', function () {
alert('hi')
})
何も起こらず、イベントは発生しません。私は何を間違っていますか??? これは私には意味がありません。
ブートストラップ 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
関数を使用します。
これを試して
$('#myModal').on('shown.bs.modal', function () {
alert('hi');
});
shown
の代わりに使用しshow
て、関数とアラートの最後にセミコロンがあることを確認してください。
a を配置する一般的な解決策setTimeout
は、場合によってはうまくいく可能性がありますが、ひどい解決策です。私は自分でそれを$(document).ready()
オフコースでラップしながら使用していましたが(しかし、それは役に立ちませんでした)、信頼できる解決策を得ることができませんでした. 一部のブラウザ/システムは他のものより時間がかかり、時には1000ms
十分ではありませんでした. そして、なぜ$(document).ready()
助けにならなかったのかを探すのに疲れていたので、:
私は別のアプローチを取りました。
初めてモーダルを使用する必要があるときに、モーダル イベントを購読します。
<a href="javascript:void(0)" onclick="ShowModal()">Open my modal</a>
そしてJS側で:
function ShowModal() {
InitModalEventsOnce();
$('#MyModal').modal('show');
}
var InitModalEventsIsDone = false; // Flag to keep track of the subscribtion
function InitModalEventsOnce() {
if (!InitModalEventsIsDone) {
InitModalEventsIsDone = true;
$('#MyModal').on('shown.bs.modal', function () {
// something
})
$('#MyModal').on('hidden.bs.modal', function (e) {
// something
});
}
}
以上です!私が見つけた唯一の信頼できる解決策。
以下に詳細を示します。
show.bs.modal はモデル ダイアログの読み込み中に機能し、show.bs.modal は読み込み後に何かを実行するために機能しました。ポストレンダリング