0

問題:ページの最初のフォームのみを送信します。

完了したらチェックボックスをクリックしてチェックできるToDoがあります。

私の部分にはフォームがあります。ToDoの数だけレンダリングされますが、IDは異なります。フォームにはチェックボックスがあります。クリックすると、フォームが送信されます。

部分的

<%= form_for todo, :remote => true, :html => {:id => "edit_done_todo_#{todo.id}"} do |f| %>
  <%= f.hidden_field(:done_by_user_id,:value => current_user.id) %>
  <%= f.check_box :completed, :class => "done_box", :id => todo.id %>
<% end %>

これがJavaScriptです

jQuery.fn.mark_todo_done = function (){
    var id = $(this).attr("id")
    console.log(id)
    $("#edit_done_todo_" + id).submit()

};
$(document).ready(function() {
 $(".done_box").live("click", function() { 
     $(this).mark_todo_done();
   })
})

console.logには正しいIDが表示されます。ただし、ページの最初のフォームが送信されます。

4

1 に答える 1

1

Railscasts には、jquery-ajax-revised (#136) と呼ばれる、このテーマに関する優れたキャストがあります。単純な To Do リストに関する基本的な知識がほとんど含まれています。

あなたの質問に関しては、次の JavaScript だけが必要です。

  $(document).ready(function() {
    $('.edit_todo input[type=submit]').remove();
    $('.edit_todo input[type=checkbox]').click(function() {
      $(this).parent('form').submit();
    });
  });

この 2 行目は、レビューから送信ボタンを削除することを意味します (ある場合)。3 行目は、チェックボックスを実際にクリックしたことに応答します (クラス名 edit_todo のフォームから、Chrome の要素の検査をクリックしてフォームのクラス名を確認できます)。4 行目は、クリックしたチェックボックスから実際にフォーム要素を取得し、そのフォームを送信します。

ここであなたの質問に答えていただければ幸いです。それ以外の場合は、あなたの問題についてさらに説明をお願いします。

于 2013-02-01T15:25:33.333 に答える