提交时在客户端验证失败时关闭静态背景模式

Close static backdrop modal on failed client-side validation when submitting

在提交表单之前,用户单击按钮打开“确认”模式。当在模式客户端验证中按下“应用”时,将触发并验证所有字段。到目前为止一切顺利,但如果验证失败,模态不会关闭,我不知道如何关闭。

我尝试将事件处理程序附加到提交按钮,然后调用 myModal.hide(),但没有任何反应。我怀疑其他 bootstrap js 代码有冲突,但我不知道该怎么办?

我曾尝试通过从模态背景中删除 类 来手动恢复 .show(),但最终我阻止了模态再次加载(在纠正验证错误后)

我正在使用 Bootstrap 5,测试版 3。

<form method="post">
    <div class="mb-1">
        <div class="form-floating pb-0">
            <input type="text" class="form-control" asp-for="Input.Title" placeholder="Title">
            <label asp-for="Input.Title">Event title</label>
        </div>
        <span asp-validation-for="Input.Title" class="text-danger"></span>
    </div>
    <button type="button" class="btn" data-bs-toggle="modal" data-bs-target="#confirmStaticModal">

    <div class="modal fade" id="confirmStaticModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="confirmStaticModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="confirmStaticModalLabel">Apply</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <p>Are you sure?</p>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" data-bs-dismiss="modal">Cancel</button>
                    <input type="submit" class="btn btn-success" value="Apply" id="confirmApplicationButton" />
                </div>
            </div>
        </div>
    </div>
</form>

添加事件处理程序的 JS 代码

document.getElementById("confirmApplicationButton").addEventListener("click", (event) => {
    var modal = new bootstrap.Modal(document.getElementById("confirmStaticModal"));
    modal.hide();       
});

通过以这种方式使用 new bootstrap.Modal(),您将使用预先存在的 Bootstrap 模态中的元素创建一个额外的新 Bootstrap 模态。将两个不同的模式附加到相同的 HTML 元素会导致冲突。

获取对已创建模式的引用的正确方法是通过 .getInstance(),如:

var modal = bootstrap.Modal.getInstance(document.getElementById("confirmStaticModal"));