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("");
});
});
}