【问题标题】:How to hide Bootstrap 5 modal only on success?如何仅在成功时隐藏 Bootstrap 5 模态?
【发布时间】:2021-06-07 00:39:44
【问题描述】:

使用引导程序 5

我有一个模式,当我点击#truck_modal 时会显示它,就像这样工作得很好:

(这段代码在我的js文件的顶部)

document.addEventListener('DOMContentLoaded', function() {
    document.querySelector('#add_truck').addEventListener('click', AddTruck);

    const truck_modal = document.querySelector('#staticBackdrop');
    const modal = new bootstrap.Modal(truck_modal, {
        backdrop: 'static'
    });

    document.querySelector('#truck_modal').addEventListener('click', () => {
        modal.show();
    });
})

现在,如果我在上面的函数中添加以下内容,它就可以工作了。

document.querySelector('#add_truck').addEventListener('click', () => {
     modal.hide();
});

但是这里不管AddTruck函数是否成功,点击#add_truck时它都会运行,我只想在AddTruck函数成功时隐藏它,所以我尝试了以下。

function AddTruck() {

    ... some validations ...

    fetch('/inbound/add_truck', {
        
        ... some fetch code ...

    })
    .then(response => {
        jsonResponse = response.json();
        status_code = response.status;

        // console.log(jsonResponse);
        // console.log(status_code);

        if(status_code != 200) {
            alert('There was an error!');

        } else{
            origin.value = '';
            produce.value = '';
            license_num.value = '';
            loaded_weight.value = '';

            // document.querySelector('#add_truck').addEventListener('click', () => {
            //     modal.hide();
            // });
            modal.hide();
            // hideFunc();

            alert('Success!!!')
        }

        return status_code
    })
    .catch(error => {
        console.log(error)
    })

}

甚至试过这个:

function hideFunc() {
    const truck_modal = document.querySelector('#staticBackdrop');
    const modal = new bootstrap.Modal(truck_modal, {
        backdrop: 'static'
    });

    modal.hide();
}

我在这里做错了什么?请帮忙...

或者这是一个功能?

编辑

这些是我的 js、bootstrap 和 jquery 脚本

<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.bundle.min.js" integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0" crossorigin="anonymous"></script>
<script src="{% static 'utils.js' %}"></script>

我将 $('#truck_modal').modal('hide'); 添加到我试图隐藏它的 else 块中。

【问题讨论】:

    标签: javascript bootstrap-modal hide bootstrap-5


    【解决方案1】:

    我也有这个问题,遗憾的是它在椅子和键盘之间:((也许在没有明确写的文档中有点。只是为了证明自己的合理性:))

    您的模式已经存在。所以调用:

    function hideFunc() {
        const truck_modal = document.querySelector('#staticBackdrop');
        const modal = new bootstrap.Modal(truck_modal, {
            backdrop: 'static'
        });
    
        modal.hide();
    }
    

    不会工作,因为这样你正在创建新的模式。因此,您创建了一个新模式,将其背景设置为静态,然后将其隐藏。甚至没有表现出来。

    您不想创建一个新的,而是希望通过使用 bootstrap.Modal.getInstance 调用/寻址已经存在的一个。像这样:

    function hideFunc() {
        const truck_modal = document.querySelector('#staticBackdrop');
        const modal = bootstrap.Modal.getInstance(truck_modal);    
        modal.hide();
    }
    

    通过这种方式,您可以自定义 Modal(Dropdown、Popover、...)处理程序。文档中只是简单介绍,容易忽略。

    【讨论】:

    • 如果您在网上搜索过这个问题,const modal = bootstrap.Modal.getInstance(truck_modal); modal.hide(); 绝对是您想要的。
    • 也可以使用Modal.getOrCreateInstance(truck_modal)函数获取或获取并创建模态实例。
    • 救了我的命。谢谢!
    • 这个答案应该是公认的答案。
    【解决方案2】:

    所以这实际上非常简单。不敢相信我在这上面花了两天时间......?‍♂️

    我刚刚将模态作为参数发送到 AddTruck 函数,如下所示:

    document.querySelector('#add_truck').addEventListener('click', () => AddTruck(modal));
    

    然后modal.hide()AddTruck 函数中工作。

    【讨论】:

      【解决方案3】:

      试试这个,它对我有用。我使用 jquery 隐藏我的模式

      $('#truck_modal').modal('hide');
      

      【讨论】:

      • 这不起作用。而且我认为 BS5 放弃了 jquery。
      • 你添加了 jquery 脚本吗?
      • BS5 没有删除 jquery 我目前正在使用它。如果以错误的顺序添加脚本,可能会导致问题
      • jquery 正确加载,没有任何错误,但模态仍然没有被隐藏
      • 可以粘贴您所做的更改吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      相关资源
      最近更新 更多