jQuery submit()只发生一次,应该发生更多

问题描述:

我想为我的帖子添加评论功能。 我可以一次添加注释和部分而不重载渲染,但是当我添加另一个评论仅呈现部分(没有别的) 下面是创建方法我打电话: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 %> 

由于事件监听器代码被执行之后被添加的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(""); 
      }); 
    }); 
}