2012-04-03 14 views
0

I eine ajax Form in der folgenden Weise strukturiert haben:Cant Umschalten zwischen zwei jquery/ajax Formen ohne Nachladen Seite nach dem ersten Anruf ajax

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

In application.js (beide sind gleich):

$(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; 
}); 
}); 

Die Formulare funktionieren ordnungsgemäß, wenn sie einmal angeklickt werden, laden die Seite jedoch erneut, wenn sie ein zweites Mal angeklickt werden. Warum kann ich nicht zwischen den beiden Formen mit Ajax wechseln?

shared/speichern Teil:

<%= 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 teilweise geteilt:

<%= 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

Schwierig ohne zu sehen, die HTML zu sagen, aber ein paar möglichen Probleme: 1. Sie das Formular vollständig als Folge des AJAX-Aufrufs zu ersetzen, Dadurch wird der Submit-Event-Handler entfernt. 2. Ihr "unsave" -Formular hat keine Klasse 'save_form'. Daher funktioniert der Versuch, den Ereignishandler zu binden, nicht. –

+0

Hey Anthony, ich weiß das ein bisschen verspätet, aber was genau meinst du? Wie könnte man verhindern, dass das Formular vollständig durch den Ajax-Aufruf ersetzt wird? Mein nicht gespeichertes/gespeichertes Formular muss zwei Klassen haben (sowohl speichern als auch nicht speichern)? –

Antwort

0

Vielleicht preventDefault() enthalten? Sie brauchen auch nicht zweimal die bereit Methode zu definieren:

$(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

Danke für den Vorschlag. Ich habe das versucht, aber leider hat es nicht funktioniert. –

Verwandte Themen