由ajax调用打开的Bootstrap 4模态 - 关闭按钮不起作用

时间:2018-01-22 18:44:41

标签: javascript php jquery ajax twitter-bootstrap

我的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">&times;</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">&times;</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变量发送到打开的模态?我已经坚持了很长时间,所有的建议都非常感激。如果我应该提供更多信息,请告诉我。

1 个答案:

答案 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;马上 ;)