2012-04-03 46 views
0

我有以下列方式构造的AJAX形式后页面重新加载:广东话切换而无需首先AJAX调用

<% if @post.saved? %> 
    <%= render 'shared/unsave' %> 
<% else %> 
    <%= render 'shared/save' %> 
<% end %> 

在的application.js(两者是相同的):

$(document).ready(function(){ 
    $('.save_form').submit(function(){ 
    $.post($(this).attr('action'), $(this).serialize(), null, "script"); 
    return false; 
}); 
}); 

$(document).ready(function(){ 
    $('.unsave_form').submit(function(){ 
    $.post($(this).attr('action'), $(this).serialize(), null, "script"); 
    return false; 
}); 
}); 

单击一次就可以正常工作,但第二次单击时会重新加载页面。为什么不能用ajax在两个窗体之间切换?

共享/保存部分:

<%= form_for current_user.saved.build(:post_id=> post.id), :html => { :class => 'save_form'}, :remote => true do |f| %> 
      <div><%= f.hidden_field :post_id %></div> 
      <%= image_submit_tag("save-off.png", :alt => "save", :id => "save_button", :title => "Add to Saved") %> 
<% end %> 

共享/取消保存部分:

<%= form_for current_user.saved.find_by_post_id(post), :html => { :method => :delete, :class => 'unsave_form' }, :remote => true do |f| %> 
      <div><%= f.hidden_field :post_id %></div> 
      <%= image_submit_tag("save-on.png", :alt => "unsave", :id => "unsave_button", :title => "Remove from Saved") %> 
<% end %> 
+0

很难说没有看到HTML,但一些潜在的问题:1。你完全替换形式的AJAX调用的结果,从而删除提交事件处理程序。 2.你的“unsave”形式没有class save_form,所以试图绑定事件处理程序不起作用。 – 2012-04-03 14:27:33

+0

嘿安东尼,我知道这有点迟了,但你究竟是什么意思。如何防止表单被ajax调用完全取代?我的unsave /保存表单必须有两个类(保存和未保存)? – 2012-04-08 21:41:12

回答

0

也许包括preventDefault()?你也不需要两次定义准备方法:

$(document).ready(function(){ 

    $('.save_form').submit(function(event){ 
     event.preventDefault(); 
     $.post($(this).attr('action'), $(this).serialize(), null, "script"); 
     return false; 
    }); 

    $('.unsave_form').submit(function(event){ 
     event.preventDefault(); 
     $.post($(this).attr('action'), $(this).serialize(), null, "script"); 
     return false; 
    }); 

}); 
+0

感谢您的建议。我试过,但不幸的是,它没有奏效。 – 2012-04-03 16:41:11