我的Bootstrap模态有问题。我正在使用$.ajax
调用,因此我可以将POST数据发送到单独的.php文件,以便在打开的模式中显示。我一直在使用Bootstrap 3,我没有bug,但是当我升级到Bootstrap 4时,我的模态不会关闭。
最初我在StackOverflow上找到了使用show.bs.modal
的技术,因为我正在研究构建我的网站。为了测试目的,我尽可能简单地删除了我的代码,所以我可以在这个问题中复制它。在下面的代码中,标题为“启动演示模式”的按钮将打开和关闭,但“启动ajax演示模式”将仅打开(我必须刷新以使其消失)。
我非常努力地遵循Bootstrap关于如何安排链接和对其库的引用的建议。请注意,“function”上有一个名为test-modal.php
的文件涉及show.bs.modal
“。
请参阅我正在尝试的精简测试代码,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
<link rel="icon" href="http://si.hclibrary.org/wp-content/uploads/2017/02/Icon_SmallSi-01.png" sizes="32x32">
<title>HCLS IT Helpdesk Request Site</title>
</head>
<body>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
Launch demo modal
</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal2">
Launch ajax demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="exampleModal2" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"></div>
<script src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
<script>
$( document ).ready(function() {
$('#exampleModal2').on('show.bs.modal', function(e) {
$.ajax({
type:'post',
url:'test-modal.php',
data:{
id:"id",
type:"type"
},
success:function(data) {
$('#exampleModal2').html(data);
}
});
});
});
</script>
</body>
</html>
我的test-modal.php文件非常简单:
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Ajax Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
还有其他人遇到过这个问题吗?模态不会像通常那样关闭吗? Bootstrap 4中有什么东西被弃用了,所以这不应该像过去那样工作吗?或者是否有另一种方法我应该将POST变量发送到打开的模态?我已经坚持了很长时间,所有的建议都非常感激。如果我应该提供更多信息,请告诉我。
答案 0 :(得分:2)
不要替换整个模态标记...
由于事件处理程序在加载时被Bootstrap绑定,如果你&#34;替换&#34;他们,由于Bootstrap已经运行,新元素不会被绑定。
只需在Ajax $('#exampleModal2 .modal-body').html(data);
回调中使用success
加载模态正文。
如果您想更改标题,可以使用以下方式进行:
$('#exampleModal2 .modal-title').html("Ajax loaded this new title.");
如果您需要从服务器资源发送标题和正文内容,请查找JSON数据响应。
JSON数据格式允许您发送多个数据&#34;马上 ;)