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 正确指出的那样,您在问题中提供的 JSFiddle 正在侦听show非元素 ( #modal-delete) 上的事件,而它应该附加到实际的模态 ( #myModal) [您在代码中正确执行的]。

其次,尽管观察正确,我仍然可以证明我看到了您所抱怨的行为,原因如下:show事件在实际模态显示之前触发,因此您的调用hide()是在其余部分之前进行的的show()代码。解决它的一种方法是改为监听shown事件。那不是这样做的方法!

做你正在尝试的正确方法是简单地调用preventDefault()事件。

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

JSFiddle

这将节省一大堆正在执行的不必要的代码。

顺便说一句,我只想补充一点,我认为这个场景很好地说明了同时拥有 ashowshownevent 的原因。虽然不是事件的唯一原因,但在操作发生之前show触发它允许开发人员在需要时取消它。

于 2012-07-31T14:23:00.993 回答
0

好吧,一切都按预期工作。我更新了你的小提琴:http: //jsfiddle.net/nzjZM/1/

于 2012-07-31T09:21:29.750 回答