【问题标题】:Need to allow forms to be resubmitted Rails AJAX需要允许重新提交表单 Rails AJAX
【发布时间】:2026-01-25 09:05:02
【问题描述】:

我正在编写一个应用程序,我希望能够通过 AJAX 将人员添加到部门,但是虽然我可以多次删除,但我只能添加一次。好像不能多次提交表单。 我正在使用部分(包含两种类型的表单)。唯一的区别是只有一个“添加表单”和多个“删除表单”(因为您可以同时在多个部门)。

<td><%= form_tag remove_department_person_path(:id => @person.id, :department => department), :method => :post, :class => "remove_form", :remote => true  do %>
<% submit_tag "Remove", :class => "btn"%><% end %></td>

多次生成

<%= form_tag add_department_person_path(:id => @person.id), :method => :post, :remote => true, :class => "add_form" do %>
  <td>
    <%= select_tag 'department', options_for_select(@unassigned)%>
  </td>
  <td>
    <%= text_field_tag :title %>
  </td>
  <td>
    <%= submit_tag "Add", :class => "btn add-btn"%>
  </td>
<% end %>

生成一次。我的 javascript 是

$('.remove_form').on('ajax:success', function(event,data) {
  d = jQuery.parseJSON(data)
  $('#departments').html(d.html)
  return false
})
$('.add_form').live('ajax:success', function(event,data) {
  d = jQuery.parseJSON(data)
  $('#departments').html(d.html)
  return false
})

每次重新加载部分时都会重新运行,所以这不应该是问题。有什么建议吗?

【问题讨论】:

  • 为什么要重新渲染部分表单?这不应该是必要的。
  • 因为添加/删除或部门需要更新,这样如果有人改变主意,他们可以重新添加部门

标签: ruby-on-rails ajax forms jquery


【解决方案1】:

发现问题(至少部分)是由于 rails 处理 AJAX 的方式 - 事件处理程序只发生一次。

function updateForms(data) {
  $('#departments').html($("<div>"+data+"</div>").find("#departments").html())
  setAjax()
  return false
}

function setAjax() {
  $('#deplist').on('submit', '.remove_form', function(e) {
    $.rails.handleRemote( $(this) );
    e.preventDefault();
  });
  $('.add_form').on('submit', function(e) {
    $.rails.handleRemote( $(this) );
    e.preventDefault();
  });
  $('.remove_form').on('ajax:success', function(event,data) {
    updateForms(data)
  })
  $('.add_form').on('ajax:success', function(event,data) {
    updateForms(data)
  })
}

我从另一个堆栈溢出问题中获得了此代码的基础,如果我能再次找到它,我会链接到它

【讨论】: