我读了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>

当前回答

在我的情况下,我显然是试图在显示对话框后过快地关闭它。所以在我的闭合模态函数中,我使用了这个:

setTimeout(() => {
    $('#loadingModal').modal('hide');
}, 300);

其他回答

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

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

医生是这样说的: http://getbootstrap.com/javascript/#modals-methods

方法如下: $ (' # myModal ') .modal(隐藏的)

如果你需要多次打开不同内容的模态,我建议添加(在你的主js中):

$('body').on('hidden.bs.modal', '.modal', function () {
      $(this).removeData('bs.modal');
    });

因此,您将为下一个开放清理内容,并避免某种缓存

有时

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

没有得到的工作,所以你需要添加这个到你的模式的页脚:

<button type="button" id="close_cred_modal" class="btn btn-secondary" data-dismiss="modal">Close</button>

然后加上这一行来关闭模态

$('#close_cred_modal').click();

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

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

请在这里看看工作小提琴

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

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

我知道这是一个老问题,但我发现这些都不是我真正想要的。这似乎是由于试图关闭模式之前,它完成显示。

我的解决方案是基于@schoonie23的答案,但我必须改变一些东西。

首先,我在脚本的顶部声明了一个全局变量:

<script>
    var closeModal = false;
    ...Other Code...

然后在我的模态代码中:

$('#myModal').on('show.bs.modal', function (event) {
    ...Some Code...
    if (someReasonToHideModal) {
        closeModal = true;
        return;
    }
    ...Other Code...

然后这个:(注意名称'show .bs. ')Modal '表示模式已经完全显示,而不是show事件被调用时触发的'show'。(我最初只是试着“显示”,但没有用。)

$('#myModal').on('shown.bs.modal', function (event) {
    if (closeEditModal) {
        $('#myModal').modal('hide');
        closeModal = false;
    }
});

希望有一天这能帮别人省下额外的研究。在我想到这个之前,我花了一点时间寻找解决方案。