简体   繁体   English

Bootstrap 5 模态不会关闭

[英]Bootstrap 5 modal won't dismiss

All my modal forms are working fine.我所有的模态 forms 工作正常。 But here's one I ported from Bootstrap 4 to Bootstrap 5 and it won't close.但这是我从 Bootstrap 4 移植到 Bootstrap 5 的一个,它不会关闭。 The Close button (the X at the top of the popup) won't close the modal.关闭按钮(弹出窗口顶部的 X)不会关闭模式。 And the Cancel button won't close the modal.并且取消按钮不会关闭模式。

I updated data-dismiss to data-bs-dismiss .我将data-dismiss更新为data-bs-dismiss I don't know what else I'm missing.我不知道我还缺少什么。 There are no JavaScript errors.没有 JavaScript 错误。

 $('#open-modal').on('click', function() { var $modal = $('#date-filter-modal'); $modal.show(); });
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> <button id="open-modal" type="button" class="btn btn-primary">Open Modal</button> <div id="date-filter-modal" class="modal" tabindex="-1" role="dialog"> <form method="get"> <input type="hidden" name="ftype" /> <input type="hidden" name="fid" /> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title"></h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label class="control-label">Start Date</label> <input class="form-control start-date" type="date" /> </div> </div> <div class="col-md-6"> <div class="form-group"> <label class="control-label">End Date</label> <input class="form-control end-date" type="date" /> </div> </div> </div> </div> <div class="modal-footer d-flex justify-content-between"> <div> <button type="button" class="clear-date-filter btn btn-danger">Clear</button> </div> <div> <button type="submit" class="btn btn-success">Set Filter</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button> </div> </div> </div> </div> </form> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>

Can anyone suggest what I might have missed?谁能建议我可能错过了什么?

I looks like you did not initialize the modal.我看起来你没有初始化模态。 Remove display: block from the modal and "show" it properly like so:从模式中删除display: block并正确“显示”它,如下所示:

 let modal = new bootstrap.Modal('#date-filter-modal') modal.show()
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script> <div id="date-filter-modal" class="modal" tabindex="-1" role="dialog"> <form method="get"> <input type="hidden" name="ftype" value="ShipDate"> <input type="hidden" name="fid"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Ship Date Filter</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label class="control-label">Start Date</label> <input class="form-control start-date" type="date"> </div> </div> <div class="col-md-6"> <div class="form-group"> <label class="control-label">End Date</label> <input class="form-control end-date" type="date"> </div> </div> </div> </div> <div class="modal-footer d-flex justify-content-between"> <div> <button type="button" class="clear-date-filter btn btn-danger">Clear</button> </div> <div> <button type="submit" class="btn btn-success">Set Filter</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button> </div> </div> </div> </div> </form> </div>

Looks like I found the issue.看来我发现了问题。

Under Bootstrap 4, I would display the modal like this:在 Bootstrap 4 下,我会像这样显示模式:

$modal.modal();

This does nothing under Bootstrap 5, so I changed it to this:这在 Bootstrap 5 下没有任何作用,所以我将其更改为:

$modal.show();

That works, but I guess it is no longer using the Bootstrap modal logic.那行得通,但我想它不再使用 Bootstrap 模态逻辑。 It's simply making the form visible.它只是使表单可见。 Either way, it prevents the normal dismiss logic from working.无论哪种方式,它都会阻止正常的解除逻辑工作。

The correct syntax is:正确的语法是:

$modal.modal('show');

You can try adding a function for .btn-close .您可以尝试为.btn-close添加 function 。

 let modal = new bootstrap.Modal('#date-filter-modal') modal.hide() $('#open-modal').on('click', function() { var $modal = $('#date-filter-modal'); modal.show(); }); $('.btn-close').on('click', function() { var $modal = $('#date-filter-modal'); modal.hide(); });
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> <button id="open-modal" type="button" class="btn btn-primary">Open Modal</button> <div id="date-filter-modal" class="modal" tabindex="-1" role="dialog"> <form method="get"> <input type="hidden" name="ftype" /> <input type="hidden" name="fid" /> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title"></h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label class="control-label">Start Date</label> <input class="form-control start-date" type="date" /> </div> </div> <div class="col-md-6"> <div class="form-group"> <label class="control-label">End Date</label> <input class="form-control end-date" type="date" /> </div> </div> </div> </div> <div class="modal-footer d-flex justify-content-between"> <div> <button type="button" class="clear-date-filter btn btn-danger">Clear</button> </div> <div> <button type="submit" class="btn btn-success">Set Filter</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button> </div> </div> </div> </div> </form> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM