2010-03-14 121 views
0

我已經開始使用jQuery和rails。我做了一個簡單的表單,提交給數據庫並更新頁面,而不用用ajax重新加載。混淆rails div id命名

在我的jQuery函數中,我使用$「#new_comment」作爲id名稱(在我的application.js和create.js.erb文件中),但在我的places/show視圖文件中,我將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

請發送一些編碼給 – 2010-03-14 14:18:53

+0

添加代碼 – 2010-03-14 14:44:02

+1

您將'submit'事件附加到容器div,而不是其中的表單。 – 2010-03-14 14:45:14

回答

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似乎做你期望的。

+0

這不起作用,但如果我使用this.submit(函數)並且不使用參數,它就可以工作。謝謝。 – 2010-03-14 16:54:31