2012-04-03 1 views
0

У меня есть форма Ajax структурированную следующим образом:Брус переключаться между двумя Jquery/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 %> 

общий/unsave частичный:

<%= 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. В вашей «несохраненной» форме нет класса 'save_form', поэтому попытка связать обработчик событий не работает. –

+0

Эй Энтони, я знаю, это немного задерживается, но что именно вы имеете в виду. Как можно предотвратить полную замену формы на вызов ajax? У моей несохраненной/сохраненной формы должны быть два класса (оба - сохранение и несохранение)? –

ответ

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

Спасибо за предложение. Я пробовал это, но, к сожалению, он не работал. –

Смежные вопросы