2012-07-25 12 views
11

Próbuję złożyć formularz za pomocą link_to następująco:Złożenie użyciu link_to w szynach

<%= form_for(@post, :url=> '/post/action', :method=> 'post', :html => {:id=>'form_id'}) do |f| %> 
    .... 

<%= link_to 'submit', "/post/action", :onclick=>"document.getElementById('form_id').submit()" %> 

    .... 

ale nie jest księgowania formularza, to jest po prostu moja forma przekierowanie do określonego adresu URL. Czy ktoś wie, jak to zrobić?

Odpowiedz

23

Można użyć:

<%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %> 

jeśli używasz jQuery i nowszą wersję szynach.

powyżej będą działać, ale jeśli masz naprawdę długiego strona będzie poruszać się do góry strony ze względu na „#”, więc jeśli chcesz uniknąć że można zrobić:

<%= link_to 'submit', "", :onclick => "$('#form_id').submit()" %> 
7

Myślę, że obie rzeczy się zdarzają. Przeglądarka rozpoczyna wysyłanie formularza, ale również podąża za linkiem: href. Możesz to naprawić, łącząc się z # zamiast /post/action ...

... jednak nie polecam tego. Istnieje kilka lepszych podejść:

Po pierwsze, możesz użyć przycisku zamiast linku. Będziesz musiał go stylizować, aby wyglądał jak link, ale to nie powinno być problemem. Będzie lepiej, bo nie złamie Zasady Najmniejszej Niespodzianki (ludzie, którzy czytają kod oczekują formularzy z przyciskami) i nie będziesz potrzebował JavaScript.

Jeśli nalegasz na użycie linku, powinieneś przynajmniej przenieść kod JavaScript z widoku do pliku JavaScript. Następnie dodaj to zachowanie bez najmniejszej ingerencji (chociaż nie będziesz mieć dobrego zastępstwa z linkiem). Zakładając, że używasz jQuery, powinno być tak proste, jak:

$(document).on('click', '[data-submit-form]', function(e) { 
    e.preventDefault(); 
    $(this).closest('form').submit() 
} 
Powiązane problemy