0

我正在编写一个应用程序,我希望能够通过 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
})

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

4

1 回答 1

0

发现问题(至少部分)是由于 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)
  })
}

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

于 2012-08-18T17:01:24.787 回答