我读了Bootstrap网站上的帖子,疯狂地谷歌了一下——但我肯定找不到一个简单的答案……

我有一个Bootstrap模式,我从一个link_to helper像这样打开:

<%= link_to "New Contact", new_contact_path, {remote: true, 'data-toggle' => 'modal', 'data-target' => "#myModal",  class: "btn btn-primary"} %>

在我的ContactsController中。创建动作,我有创建联系人的代码,然后传递给create.js.erb。在create.js。erb,我有一些错误处理代码(ruby和javascript的混合)。如果一切顺利,我想关闭模态。

这就是我遇到麻烦的地方。当一切顺利的时候,我似乎不能放弃模态。

我尝试了$('#myModal').modal('hide');这没有任何影响。我还尝试了$('#myModal').hide();这导致模态解散,但留下背景。

关于如何在create.js.erb中关闭模式和/或解散背景,有什么指导吗?

Edit

下面是myModal的标记:

<div class="modal hide" id="myModal" >
  <div class="modal-header">
    <a class="close" data-dismiss="modal">×</a>
    <h3>Add Contact</h3>
    <div id="errors_notification">
    </div>
  </div>
  <div class="modal-body">
    <%= form_for :contact, url: contacts_path, remote: true do |f| %>  
      <%= f.text_field :first_name, placeholder: "first name" %>
      <%= f.text_field :last_name, placeholder: "last name" %>
      <br>
      <%= f.submit "Save", name: 'save', class: "btn btn-primary" %>
      <a class="close btn" data-dismiss="modal">Cancel</a>
    <% end %>
  </div>
  <div class="modal-footer">
  </div>
</div>

当前回答

用bootstrap隐藏和显示模态的最佳形式是

// SHOW
$('#ModalForm').modal('show');
// HIDE
$('#ModalForm').modal('hide');

其他回答

在浏览器窗口中打开模式后,使用浏览器的控制台进行尝试

$('#myModal').modal('hide');

如果它工作(并且模式关闭),那么你知道你关闭的Javascript没有正确地从服务器发送到浏览器。

如果它不起作用,那么你需要进一步调查客户端发生了什么。例如,确保没有两个元素具有相同的id。例如,它的工作后,第一次页面加载,但不是第二次?

浏览器控制台:firefox的firebug, Chrome或Safari的调试控制台等。

这是一个不好的做法,但你可以使用这种技术通过在javascript中调用close按钮来关闭模式。 这将在3秒后关闭模式。

<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script>
window.onload=function()
{
setInterval(function(){ 

$("#closemodal").click();
}, 3000);

}
</script> 
</head>
<body>

   <div class="container">
 <h2>Modal Example</h2>
<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal"   data-target="#myModal">Open Modal</button>

<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">

    <!-- Modal content-->
  <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">&times;</button>
      <h4 class="modal-title">Modal Header</h4>
    </div>
    <div class="modal-body">
      <p>Some text in the modal.</p>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" data-dismiss="modal" id="closemodal">Close</button>
    </div>
  </div>

</div>
</div>

 </div>

</body>
</html>

(参考Bootstrap 3),隐藏模式使用:$('#modal').modal('hide')。但背景的原因(对我来说)是因为我在“隐藏”完成之前破坏了模态的DOM。

为了解决这个问题,我将隐藏事件与DOM移除连接起来。在我的例子中:this.render()

var $modal = $('#modal');

//when hidden
$modal.on('hidden.bs.modal', function(e) { 
  return this.render(); //DOM destroyer
});

$modal.modal('hide'); //start hiding

关闭引导模式,你可以传递'hide'作为选项的模式方法,如下所示

$('#modal').modal('hide');

请在这里看看工作小提琴

bootstrap也提供事件,你可以挂钩到模态功能,比如如果你想触发一个事件,当模态完成隐藏从用户,你可以使用hidden. b.s modal事件,你可以阅读更多关于模态方法和事件在这里的文档

如果以上方法都不起作用,给你的关闭按钮一个id并触发点击关闭按钮。

用bootstrap隐藏和显示模态的最佳形式是

// SHOW
$('#ModalForm').modal('show');
// HIDE
$('#ModalForm').modal('hide');