2012-04-11 45 views
1

這是我目前使用的代碼:如何將函數應用於jquery ajax提交完成的類?

$.ajax({ 
    success: function(){ 
     $('.post_container').append('test <br />'); 
    } 
}); 
<% sleep 1 %> 

有使用同一類別中的幾種意見,所以測試是它類似於我用我的單個主窗體微柱的代碼,但與此適用於所有post_containers,而不是郵件剛剛製作的那個。 「測試」文本最終將被保存用戶發佈的實際評論的div替換。

通常我會使用「this」,但這不起作用。

HTML:

<div class="post_content"> 
    <div class="post_container"> 
     <div class="userNameFontStyle"> 
      <%= link_to current_users_username.capitalize, current_users_username %> - 
      <div class="post_time"> 
       <%= time_ago_in_words(m.created_at) %> ago. 
      </div> 
     </div> 
     <%= simple_format h(m.content) %> 
    </div> 
    <% if m.comments.any? %> 
    <% comments(m.id).each do |comment| %> 
    <div class="comment_container"> 
     <%= link_to image_tag(default_photo_for_commenter(comment), :class => "commenter_photo"), commenter(comment.user_id).username %> 
     <div class="commenter_content"> 
      <div class="userNameFontStyle"> 
       <%= link_to commenter(comment.user_id).username.capitalize, commenter(comment.user_id).username %> - <%= simple_format h(comment.content) %> 
      </div> 
     </div> 
     <div class="comment_post_time"> 
      <%= time_ago_in_words(comment.created_at) %> ago. 
     </div> 
    </div> 
    <% end %> 
    <% end %> 
    <% if logged_in? %> 
    <%= form_for @comment, :remote => true do |f| %> 
    <%= f.hidden_field :user_id, :value => current_user.id %> 
    <%= f.hidden_field :micropost_id, :value => m.id %> 
    <%= f.text_area :content, :placeholder => 'Post a comment...', :class => "comment_box", :rows => 0, :columns => 0 %> 
    <div class="commentButtons">   
     <%= f.submit 'Post it', :class => "commentButton" %> 
     <div class="cancelButton"> 
      Cancel 
     </div> 
    </div> 
    <% end %> 
    <% end %> 
    </div> 
</div> 

我將如何面對呢?

親切的問候

+0

你能澄清你想要發生什麼嗎?你的代碼不工作?您沒有指定實際撥打電話的網址。 – Seth 2012-04-11 00:13:58

+0

是否像'$('。post_container')。submit(...)' – 2012-04-11 00:14:55

+0

我想簡單地將新評論追加到評論列表中。我在Rails框架中使用ruby,大部分的ajax都是通過在表單中​​加入「remote => true」來設置的。有了上面的代碼,如果ajax文章提交成功,那麼我想將評論附加到評論列表。上面的代碼附加到頁面上的所有.post_container類,而不僅僅是我發佈新評論的那個類。 – LondonGuy 2012-04-11 00:24:48

回答

0

這就是我最終要做的。

.new_comment是我的表格ID

$('.new_comment').on('ajax:success', function(){ 
    $(this).parent('.post_content').find('.comment_container:last').after("<BR />TEST <BR />"); 

}); 

<% sleep 1 %> 

唯一的問題現在查明後實際comment_container只是做。

0

新:

$(function() { 
    $('.post-form').submit(function(){ 
     var $post_content = $(this).find('.post_content'); 

     $.ajax({ 
      url: this.attributes['action'], 
      data: $(this).serialize(), 
      success: function() { 
       $post_content.append('test <br />'); 
      } 
     }) 
     return false; //this will stop the form from really submitting. 
    }); 
}); 

這應該做你要找的東西。只需在任何地方包含此JavaScript。

OLD:

$('form').submit(function(){ 
    $.ajax({ 
     url: this.attributes['action'], 
     data: $(this).serialize(), 

     //the below line might need to be adapted. 
     var post_content = $(this).find('.post_content'); 

     success: function() { 
      $(post_content).append('test <br />'); 
     } 
    }) 

這個假定只有一個頁面上的形式。但是,要使代碼完全工作,我需要知道如何區分哪個.post_content是「提交的」post_content。你如何以編程方式確定?每個post_content有不同的按鈕嗎?或者每個post_content div附近有不同的表單?無論如何,你必須以某種方式將它包含到js代碼中。

+0

有1個表格,但它是「每個」循環的一部分,因此每個帶註釋的微博都會在下面顯示一個表格。 – LondonGuy 2012-04-11 09:55:26

+0

然後這應該工作,不應該(與我添加的一個補充)?只需包含此js文件,並且每次提交帶有「post-form」類的表單時,都會運行ajax請求。這對你有用嗎? – 2012-04-11 16:37:37

+1

恩,我不認爲你可以在那裏聲明你的post_content變量。你正在傳遞給ajax()函數的選項對象的中間。在開始你的ajax函數之前聲明它。 – idrumgood 2012-04-11 16:44:46