如何仅在成功时隐藏 Bootstrap 5 模式?

nam*_*ndy 5 javascript hide bootstrap-modal bootstrap-5

使用引导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();
    });
})
Run Code Online (Sandbox Code Playgroud)

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

document.querySelector('#add_truck').addEventListener('click', () => {
     modal.hide();
});
Run Code Online (Sandbox Code Playgroud)

但在这里,#add_truck无论AddTruck函数是否成功,它都会在单击时运行,我只想在函数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)
    })

}
Run Code Online (Sandbox Code Playgroud)

甚至尝试过这个:

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

    modal.hide();
}
Run Code Online (Sandbox Code Playgroud)

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

或者这是一个功能?

编辑

这些是我的 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>
Run Code Online (Sandbox Code Playgroud)

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

Vil*_*amm 36

我也遇到了这个问题,遗憾的是它是在椅子和键盘之间:((也许在没有写得很清楚的文档中有点。只是为了证明自己:))

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

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

    modal.hide();
}
Run Code Online (Sandbox Code Playgroud)

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

您不想创建一个新的实例,而是想通过使用 bootstrap.Modal.getInstance 来调用/解决已经存在的实例。像这样:

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

通过这种方式,您可以创建自定义模态(下拉、弹出窗口等)处理程序。文档中仅对其进行了简要描述,因此很容易被忽视。

  • `const modal = bootstrap.Modal.getInstance(truck_modal); 如果您在线搜索过这个问题, modal.hide();` 绝对是您正在寻找的。 (4认同)

Ken*_*sta 5

要隐藏 Bootstrap 模式,请使用此代码片段

var myModal = bootstrap.Modal.getOrCreateInstance(document.getElementById('myModalId'));
myModal.hide();
Run Code Online (Sandbox Code Playgroud)