Bootstrap 4 隐藏后引导4模式不再显示

Bootstrap 4 隐藏后引导4模式不再显示,bootstrap-4,bootstrap-modal,Bootstrap 4,Bootstrap Modal,我有一个隐藏模态的函数: function hideModal(){ $('#mainModal').on('shown.bs.modal', function(e) { $("#mainModal").modal("hide"); }); } 当我第一次打开模态时,它工作得很好。然后我调用hideModal()来隐藏它,这同样有效 我发现任何后续打开模式的调用: $('#mainModal').modal(); …导致模式在很快再次消失之前被打开 在

我有一个隐藏模态的函数:

function hideModal(){ 

    $('#mainModal').on('shown.bs.modal', function(e) {
        $("#mainModal").modal("hide");
    });
}  
当我第一次打开模态时,它工作得很好。然后我调用hideModal()来隐藏它,这同样有效

我发现任何后续打开模式的调用:

$('#mainModal').modal();
…导致模式在很快再次消失之前被打开

在打开第二个模式后,我没有运行任何代码

我已经检查了我的代码,以确保只加载了一个引导实例

为什么要调用$('#mainModal').modal();第一次工作,但不是以后的时间


感谢您的时间和帮助。

发生的是,第一次(以及随后!)通过调用
hideModal
函数隐藏模式时,您设置了一个事件处理程序,每次显示模式时都会关闭它。这应该是可行的,它只是在调用时隐藏了模态:

function hideModal() { 
    $("#mainModal").modal("hide");
}  

发生的情况是,第一次(以及随后!)通过调用
hideModal
函数隐藏模式时,您设置了一个事件处理程序,每次显示模式时它都会关闭。这应该是可行的,它只是在调用时隐藏了模态:

function hideModal() { 
    $("#mainModal").modal("hide");
}  

隐藏和显示模式都是异步事件,这意味着需要几毫秒才能完成


因此,如果在它仍然隐藏时调用
modal()
modal('show')
,它将不会显示。相反,如果您调用
模式(“隐藏”)
而它尚未显示,它将不会隐藏。

隐藏和显示模式都是异步事件,这意味着需要几毫秒才能完成


因此,如果在它仍然隐藏时调用
modal()
modal('show')
,它将不会显示。相反,如果您在尚未显示的情况下调用
modal('hide')
,它将不会隐藏。

谢谢大家。我需要留住听众,不仅仅是:

$("#mainModal").modal("hide");
否则模态不会隐藏,因为在调用(“隐藏”)时(“显示”)调用仍在运行

jQuery有一个.off监听器,它在触发一次后删除监听器

所以我替换了:

$('#mainModal').on('shown.bs.modal', function(e) {
        $("#mainModal").modal("hide");
});
与:


现在我得到了想要的结果。

谢谢大家。我需要留住听众,不仅仅是:

$("#mainModal").modal("hide");
否则模态不会隐藏,因为在调用(“隐藏”)时(“显示”)调用仍在运行

jQuery有一个.off监听器,它在触发一次后删除监听器

所以我替换了:

$('#mainModal').on('shown.bs.modal', function(e) {
        $("#mainModal").modal("hide");
});
与:


现在我得到了想要的结果。

你能发布所有相关代码吗?你能发布所有相关代码吗?我理解你们的意思,UI延迟是我添加$('mainModal').on('show.bs.modal',function(e){$('mainModal').modal(“hide”)})的原因;作为美元(“#mainmodel”).model(“隐藏”);在调用hide()时,show()仍在运行。然而,似乎是添加了侦听器才导致后续show()调用失败。我刚刚发布了jquery还有一个one()监听器调用,它会在监听器启动一次后杀死监听器,因此我将.on替换为.one,并得到了所需的结果。我会更新我的问题。谢谢你们。我理解你们的意思,UI延迟是我在('show.bs.modal',function(e){$('mainModal').modal(“hide”)})上添加$('mainModal')的原因;作为美元(“#mainmodel”).model(“隐藏”);在调用hide()时,show()仍在运行。然而,似乎是添加了侦听器才导致后续show()调用失败。我刚刚发布了jquery还有一个one()监听器调用,它会在监听器启动一次后杀死监听器,因此我将.on替换为.one,并得到了所需的结果。我会更新我的问题。谢谢你们。