混淆rails div id命名

时间:2010-03-14 14:12:48

标签: jquery ruby-on-rails

我已经开始使用jQuery和rails。我做了一个简单的表单,提交到数据库并更新页面而不用ajax重新加载。

在我的jQuery函数中,我使用$“#new_comment”作为id名称(在我的application.js和create.js.erb文件中)但是在我的places / show view文件中,我将div命名为“add_comment”并且它工程..

我将其重命名为new_comment并且它会中断!有人可以解释一下吗?我收到一个错误:“没有行动回复1”

我的控制器中的功能是“创建”。

#views/places/show.html.erb
<div id="new_comment" style="display:none">
 #form goes here
</div>

#application.js
jQuery.fn.submitWithAjax = function(){
    $("#new_comment").submit(function() {
    $.post($(this).attr("action"), $(this).serialize(), null, "script");
    return false;
    })
};


$(document).ready(function() {
    $("new_comment").submitWithAjax();
})

#create.js.erb
$("#new_comment").before('<div id="flash_notice"><%= escape_javascript(flash.delete(:notice)) %></div>');

$("#comments_count").html("<%= pluralize(@comment.place.comments.count, 'suggestion') %>");

$("#comments").append("<%= escape_javascript(render(:partial => @comment)) %>");

$("#new_comment")[0].reset();

#comments_controller.rb
    def create
      @place = Place.find(params[:place_id])
      @comment = @place.comments.create!(params[:comment])

    flash[:notice] = "Thanks for your suggestion. Remember to share with friends!"
    respond_to do |format|
      format.html {redirect_to place_comments_path(@place)}
      format.js
      end
end

1 个答案:

答案 0 :(得分:0)

除了将submit事件附加到错误的元素之外,您还将jquery插件限制为#new_comment。您应该将其抽象一些,并在调用submitWithAjax时使用您传入的元素。您可以向表单添加id或更改document.ready函数中的选择器以定位子表单。

#application.js
jQuery.fn.submitWithAjax = function(myForm){
    $(myForm).submit(function() {
    $.post($(this).attr("action"), $(this).serialize(), null, "script");
    return false;
    })
};


$(document).ready(function() {
    $("#new_comment_form").submitWithAjax();
})

您还需要更正create.js中的reset调用。其他javascript似乎可以满足你的期望。