杀死(关闭)已经打开的Twitter Bootstrap模式?

时间:2012-07-31 08:41:41

标签: javascript jquery twitter-bootstrap

如何杀死已打开的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

2 个答案:

答案 0 :(得分:2)

首先,as @ChristianEngel correctly pointed out,您在问题中提供的JSFiddle是在非元素(show)上监听#modal-delete事件,而它应该附加到实际模态(#myModal)[您在代码中正确执行的操作]。

其次,尽管有正确的观察,我仍然可以证明我正在看到你抱怨的行为,这就是原因: show 事件在实际模态显示之前被触发,因此,您在hide()代码的其余部分之前会调用show()。解决问题的一种方法是收听shown事件。 这不是办法!!

执行您尝试的操作的正确方法是简单地在事件上调用preventDefault()

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

JSFiddle

这将节省一大堆不必要的代码。

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

答案 1 :(得分:0)

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