2012-04-15 72 views
0

我想爲我的帖子添加評論功能。 我可以一次添加註釋和部分而不重載渲染,但是當我添加另一個評論僅呈現部分(沒有別的) 下面是創建方法我打電話:jQuery submit()只發生一次,應該發生更多

def create 
    @comment = Comment.new(params[:comment]) 
    @snippet = @comment.snippet 
    @comment.save 
    @comment = Comment.new 
    render :partial => "snippets/comment" 
    end 

的Javascript:

$(document).ready(function(){ 
    save_comment(); 
}); 
function save_comment() { 
    $("#new_comment").submit(function (e) { 
     e.preventDefault(); 
     var url = "/comments/create"; 
     var post_data = $('#new_comment').serialize(); 
     logger(post_data); 
     post_data = add_auth_token(post_data); // add authenticity token to post for forgery protection (works fine) 
     $.post(url, 
      post_data, 
      function(data) { 
       $("#comments_container").html(data); 
       $("#comment_value").val(""); 
      }); 
    }); 
} 

和窗體

<%= form_for(@comment) do |f| %> 
    <%= f.text_field :value %> 
    <%= f.hidden_field :user_id, :value => current_user.id %> 
    <%= f.hidden_field :snippet_id, :value => @snippet.id %> 
    <div class="actions"> 
    <%= f.submit "Post" %> 
    </div> 
<% end %> 

回答

1

由於事件監聽器代碼被執行之後被添加的HTML不是ABL e附加一個事件處理程序submit用於添加在DOM後面的元素。您需要使用on API來綁定事件,並且它將附加一個委託事件處理程序,該處理程序可以處理來自稍後添加到文檔中的後代元素的事件。

在你的情況,你需要更改您的代碼:

$(document).ready(function(){ 
    save_comment(); 
}); 
function save_comment() { 
    $(document).on("submit","#new_comment",function (e) { 
     e.preventDefault(); 
     var url = "/comments/create"; 
     var post_data = $('#new_comment').serialize(); 
     logger(post_data); 
     post_data = add_auth_token(post_data); // add authenticity token to post for forgery protection (works fine) 
     $.post(url, 
      post_data, 
      function(data) { 
       $("#comments_container").html(data); 
       $("#comment_value").val(""); 
      }); 
    }); 
}