2009-05-11 11 views
2

Ich habe die folgenden Schienen Formular (was funktioniert), aber ich möchte den submit_tag entfernen und das Formular senden, sobald eine Optionsfeldauswahl vorgenommen wird. Wie mache ich das?Senden von Rails Form auf einem Radio Button Auswahl

<% form_tag({ :controller => "votes", :action => "create", :id => @item.id }) do %> 
    <p> 
    <% for i in 1..10 do %> 
     <%= radio_button_tag :rating, i %>&nbsp;<%=h i %>&nbsp; 
    <% end %> 
    </p> 
    <p> 
    <%= submit_tag "Create" %> 
    </p> 
<% end %> 

Antwort

7

So habe ich die genaue Lösung gefunden (Danke für die Eingabe Jungs, es half mir meine Google-Suchen neu zu definieren). Jeder war auf dem richtigen Weg, aber keiner war genau richtig.

Alles, was benötigt wurde, war 'false,: onclick => "this.parentNode.submit();' 'zum Formularhelfer radio_button_tag hinzuzufügen. Das Falsche ist ausgewählt oder nicht, und der Rest ist offensichtlich.

Die richtige Lösung sieht nun wie:

<% form_tag({ :controller => "votes", :action => "create", :id => @item.id }) do %> 
    <% for i in 1..10 do %> 
     <%= radio_button_tag :rating, i, false, :onclick => "this.parentNode.submit();" %>&nbsp;<%=h i %>&nbsp; 
    <% end %> 
<% end %> 
+0

Funktioniert nicht auf Schienen Version 4.2! :/ –

+0

Yesss danke das hat mir eine Menge Zeit erspart. –

0

Verwenden Javascript

verwenden, um jedes Onclick() Ereignis des Optionsfeld eine Funktion aufzurufen, die auf der Submit-Button() ruft einreichen.

Ich bin nicht wirklich vertraut mit RJS in Rails, aber das sollte relativ einfach sein.

1

Sie möchten ein onClick-Ereignis zu Ihrem Optionsfeld hinzufügen, das this.formName.submit() aufruft, wobei formName Ihre Formular-ID ist. Dadurch wird das Sendeereignis ausgelöst, wenn Sie auf das Optionsfeld klicken.

0

Eine großartige Möglichkeit, dies unauffällig zu erreichen, ist mit Low-Pro und Prototyp. Auf diese Weise können Sie alle Ihre Event-Handler in Ihr Javascript bringen, damit sie Ihren View-Code nicht verschmutzen. Es ist eine sehr glatte Art der Handhabung von JavaScript-Ereignissen. Sehr empfehlenswert.

+0

Rails verwenden tatsächlich Prototype als Kern-JavaScript-Bibliothek (denke ich) für die Ereignisregistrierung, außer dass Sie sich nicht mit JavaScript herumärgern und einfach die Rails HTML-Helfer verwenden müssen, um das Lesen und Generieren von JavaScript zu vereinfachen . – Ash

+1

Ihre rechten Schienen verwendet Prototyp automatisch. Das Problem ist, dass diese Helfer Ihren Code mit ziemlich hässlichem Javascript verschmutzen. Ich schlage vor, Lowpro in Verbindung mit dem Prototyp zu verwenden, um Ihr Javascript unauffällig zu machen und Javascript-Code in Ihre .js-Dateien zu verschieben, wo es hingehört. Ihr Ansichtscode wird dadurch viel sauberer. – nitecoder

1

ich etwas Ähnliches tue so diese Frage wirklich hilft.

Weitere Ash Antwort fand ich, dass die oben Onclick-Funktion nicht funktioniert, ich habe ein bisschen und das unten stehende Formular Arbeit einfach gut zu mir geändert:

<% form_tag({ :controller => "votes", :action => "create", :id => @item.id }) do %> 
    <% for i in 1..10 do %> 
     <%= radio_button_tag :rating, i, false, :onclick => "this.form.submit();" %>&nbsp;<%=h i %>&nbsp; 
    <% end %> 
<% end %> 

Hoffe, dass es jemand helfen würde.

Verwandte Themen