2014-07-16 11 views
7

Vedo alcuni problemi simili ma sembrano artificiosi e soprattutto per le versioni precedenti di Rails.Invia modulo Rails 4 con link invece del pulsante

Qual è il modo più semplice per inviare un modulo con un tag di ancoraggio (link) al posto del normale pulsante

<%= f.submit 'Search', :class => "button expand"%> 

Qual è il modo più conciso (best practice) modo per cambiare la situazione ad un link che sottopone?

+0

Solo per curiosità, perché vuoi farlo? Ad ogni modo, aggiungi semplicemente un gestore all'evento click del link, che invia il modulo. –

+0

Basta modellare il tuo pulsante per apparire come un collegamento o utilizzare alcuni Javascript per inviare il modulo. Questo non è specifico per Rails. – tirdadc

+0

L'ho visto fare riferimento come una domanda in alcuni punti, quindi ero solo curioso di sapere se esiste un Rails-way o un helper che lo rende più semplice da fare, ma in base alle risposte è solo il javascript che rende il risultato desiderato. –

risposta

9

Spesso uso js/jquery per inviare moduli. È molto utile se il pulsante di invio è esterno al modulo o se è presente più di un pulsante che invia lo stesso modulo.

$(".submit-btn").click(function(event) { 
    event.preventDefault(); 
    $("#form-id").submit(); 
}); 

Il event.preventDefault(); impedisce il tasto di default/submit comportamento.

Ecco un esempio CoffeeScript ho usato in un progetto di 4 rotaie:

ready = -> 
    if $("#form-id").length > 0 
    $(".submit-btn").click (event) -> 
     event.preventDefault() 
     $("#form-id").submit() 

$(document).ready ready 
$(document).on "page:load", ready 

Si noti inoltre, in questo modo il collegamento può essere qualsiasi tipo di elemento - non necessariamente un pulsante di invio. Non è necessario avere il pulsante di invio all'interno del modulo, ma se si esegue lo preventDefault si impedirà il comportamento di invio del modulo predefinito.

+0

Questo non sembra funzionare su Rails 5, forse a causa di problemi con il token di autenticità del modulo. – jpwynn

0

Questo è così semplice:

Poi:

<%= f.submit '', :class => "hidden", :id => 'form_submit_button' %> 
content_tag(:a, 'Submit', :name => 'submit', :id => 'submit_link') 

ed in JS:

$(document).ready(function() { 
    $(document).on("click","#submit_link",function() { 
     $('#form_submit_button').click(); 
    }); 
}); 

Non sono sicuro di sytax esatto, in modo ci potrebbe essere qualche errore di sintassi. Sentiti libero di chiedere più aiuto.

+0

Non è necessario aggiungere il pulsante di invio e nasconderlo. Basta non includerlo affatto. –

+0

Ma penso che jquery abbia deprecato l'azione form.submit(). altrimenti è bene non includere il pulsante nascosto –

+0

Obsoleto? Dove hai preso quelle informazioni? –

4

Invia

per estendere le risposte fornite già, moduli HTML devono essere presentate con un pulsante submit.

io non sono sicuro di quello che le caratteristiche particolari il pulsante submit ha più di un link - Si chiede essenzialmente l'azione submit, che un collegamento non può (info):

enter image description here

-

Link

Ciò significa che se si desidera sostituire un pulsante di invio con un link, dovrai essenzialmente imitare il metodo submit nella tua applicazione. Questo può essere fatto con JS (JQuery):

#app/assets/javascripts/application.js 
$(document).on("click", "#your_link", function(){ 
    $("#form").submit(); 
}); 

#app/views/controller/your_view.html.erb 
<%= form_tag your_path, id: "form" do %> 
    <%= link_to "Submit", your_path, id: "your_link" %> 
<% end %>