3

すでに開いている Bootstrap モーダルを強制終了するにはどうすればよいですか? jsFiddle の例:

<script>
    $(function(){

        $('#myModal').on('show', function() {
            if(true) { /* Kill (close) this modal on some condition */}
        });

    });
</script>

私はもう試した:

if(true) { $('#myModal').modal('hide');   } // Not working
if(true) { $('#myModal').modal('toggle'); } // Too much recursion!!! :P
if(true) { return;                        } // Nope
4

2 に答える 2

2

まず、@ChristianEngel が正しく指摘したようshowに、質問で指定した JSFiddleは非要素 ( )のイベントをリッスンしていますが#modal-delete、実際のモーダル ( #myModal) にアタッチする必要があります [コードで正しく実行しました]。

第二に、その正しい観察にもかかわらず、私はあなたが不平を言っている動作を見ていることをまだ証明できます。これが理由です:実際のモーダルが表示される前にショーhide()イベントがトリガーされるため、残りの前に呼び出しが行われますshow()コードの。shownこれを修正する 1 つの方法は、代わりにイベントをリッスンすることです。それはそれを行う方法ではありません!!

あなたがしようとしていることを行う正しい方法は、単にpreventDefault()イベントを呼び出すことです。

$('#myModal').on('show', function(e) {
  if (true) {e && e.preventDefault()}
});

JSFiddle

これにより、実行中の不要なコードが大幅に節約されます。

showところで、このシナリオはとshownイベントの両方を持つ理由をよく示していると思います。イベントの唯一の理由ではありませんが、アクションが発生する前にshowイベントをトリガーすることで、開発者は必要に応じてイベントをキャンセルできます。

于 2012-07-31T14:23:00.993 に答える
0

さて、すべてが期待どおりに機能します。私はあなたのフィドルを更新しました:http://jsfiddle.net/nzjZM/1/

于 2012-07-31T09:21:29.750 に答える