【问题标题】:Bootstrap Modal Form won't closeBootstrap 模态表单不会关闭
【发布时间】:2014-08-09 10:36:52
【问题描述】:

我有一个填充了数据的表格,其中每一行都有一个编辑按钮。编辑后,将出现一个引导模式弹出表单,其中包含现在可编辑的表格行数据。这个弹出表单有一个提交按钮和一个关闭按钮。关闭按钮按预期工作(关闭模式弹出窗口),提交按钮确实更新了我的数据,但不会关闭表单。

简而言之,我的模式弹出窗口正确显示,并且弹出窗口上的提交按钮确实有效,但我无法在数据更新后关闭表单。

以下是相关部分...

index.html.erb

<tbody class="majors-index">
    <!-- This renders my table with all the data and edit buttons -->
    <%= render 'index' %>
</tbody>
....
....
<div class="modal" id="major-modal">
</div>
....

_index.html.erb

....
<!-- This opens the modal dialogue -->
<%= link_to "Edit", edit_major_path(m), remote: true, class: "btn btn-primary", data: {toggle: 'modal', target: "#major-modal"} %>
....

edit.js.erb

// display the modal form
$("#major-modal").html("<%= escape_javascript(render partial: "majors/edit") %>")
$("#major-modal").modal("toggle")

_edit.html.erb

<!-- #modal-without-animation -->
<div class="modal-dialog">
  <div class="modal-content">
    <div class="modal-header">
        <h4><%= "Editing #{@major.name}" %></h4>
    </div>
    <%= render "form"%>
  </div>
</div>

_form.html.erb

<%= form_for @major, remote: true, html: {class: "form-horizontal", style: "display-inline;"} do |f| %>
    <div class="modal-body">
    ....
    ....
    <%= f.submit "Modify", class: "btn btn-primary", id: "btnSubmit" %>
    <%= link_to "Cancel", "#", class: "btn", data: {dismiss: "modal"} %>
    ....
    </div>
<% end %>

现在,点击提交后,首先调用的是我的 update.js.erb,它应该关闭我的模态表单。

update.js.erb

$("#major-modal").html("<%= escape_javascript(render partial: "majors/edit") %>")
$("#major-modal").modal("toggle")

但无论出于何种原因,模态表单都不会关闭。我尝试将“切换”切换为“隐藏”,但这也没有效果。我知道 update.js.erb 被调用的事实,因为如果我只是在那里发出警报,它就会被解雇。

我做错了什么?为什么模态表单不会关闭?

更新:

这是我的控制器...

def update
    @majors = Major.all
    @major = Major.find(params[:id])
    @major.update_attributes(major_params)

    respond_to do |format|
      format.js
    end
  end

【问题讨论】:

  • 那么,告诉模态框在表单提交时隐藏的代码在哪里?应该有一个条件,在提交时, $("#major-modal").modal("hide");
  • @user3743250 它在update.js.erb 文件中。我正在使用“切换”,如果表单当前打开,它应该隐藏它。即使我明确地说“隐藏”,我仍然没有成功。
  • $('#major-modal').modal('hide'); - 此代码直接来自我的一个项目,并且运行良好。你记得把“;”最后?
  • 在 js.erb 文件中应该没关系,但即使使用分号,模态仍然不会关闭。
  • 模态是通过jquery动态创建的吗?还是在html中预渲染,然后通过css隐藏?

标签: jquery ruby ajax ruby-on-rails-4 twitter-bootstrap-3


【解决方案1】:

好的,所以在页面呈现之后。动态添加新元素时,不一定要将其添加到 DOM 以便于 jquery 选择。它不能关闭不存在的元素。

您可以通过委托事件解决此问题:

$('#btnSubmit').on('submit', '#major-modal', function() {
    $(this).modal('hide');
});

这是假设您将其放入文档就绪子句中,如下所示:

$(document).ready(
$('#btnSubmit').on('submit', '#major-modal', function () {
    $(this).modal('hide');
}));

【讨论】:

  • 在我当前文件的上下文中,我应该把它放在哪里?
  • 所以,你不需要调用它。因为这是一个等待你点击提交按钮的监听事件。你不应该再需要你的 update.js.erb 文件了。只需将上述代码放入项目中包含的任何 javascript 文件中即可。
  • 我是否必须更改我的模态表单?就像,我仍然需要remote: true 语法,对吧?我已经在页面的 document.ready 部分添加了 javascript,但它似乎仍然没有被解雇。我正在用 Firefox 中的 Firebug 验证这一点。或者我在控制器中的更新中还有其他事情要做吗?
  • 我认为问题在于我的 btnSubmit 在技术上与主要模式 div 位于不同的页面上。例如,如果我查看页面源代码,则表单不会显示,因为它在模式中,而 div 在我的主索引页面上。
  • 恐怕我对 ruby​​ on rails 不熟悉。就 html、css 和 jquery 而言,我只能为您提供帮助。您是否删除了最初调用 update.js.erb 的代码?禁用该文件以及对它的任何调用,因为它可能与侦听器事件冲突。
猜你喜欢
  • 2022-08-05
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2018-12-18
  • 2016-04-14
相关资源
最近更新 更多