0

AJAX を介して部門に人を追加できるようにするアプリを作成していますが、何度も削除できますが、複数回追加することはできません。フォームを複数回送信することはできないようです。パーシャル (2 種類のフォームを含む) を使用しています。唯一の違いは、「追加フォーム」が 1 つしかなく、「削除フォーム」が多数あることです (一度に多くの部門に所属できるため)。

<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 を処理する方法 (イベント ハンドラーが 1 回だけオフになる) に起因することが判明しました。

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 に答える