2012-07-25 27 views
11

内のlink_toを使用してフォームを送信:は、私は次のようにのlink_toを使用してフォームを送信しようとしているレール

<%= 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()" %> 

    .... 

が、それはフォームを掲示されていない、それは単に指定されたURLに私のフォームをリダイレクトしています。誰もこれを行う方法を知っていますか?

答えて

23

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

をあなたはjQueryとレールの以降のバージョンを使用している場合、あなたはjQueryのを使用していると仮定すると、のように単純にする必要があります。

以上が動作しますが、あなたが本当に長いページを持っている場合、それはあなたが行うことができないようにしたいので、もしので、「#」のページの一番上に移動します:

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

私は両方のことが起こると思います。ブラウザはフォームの送信を開始しますが、リンクのhrefにも続きます。 /post/actionの代わりに#にリンクして修正することができます。

...ただし、お勧めしません。より良いアプローチがいくつかあります:

まず、リンクの代わりにボタンを使用できます。リンクのように見えるようにスタイルを設定する必要がありますが、それは問題ではありません。これは、Least Surpriseの原則(コードを読んでいる人々がフォームをボタンで提出することを期待する人々)の原則を破らず、JavaScriptを必要としないため、より良いでしょう。

リンクを使用する場合は、JavaScriptコードをビューからJavaScriptファイルに移動する必要があります。次に、この動作を目立たずに追加してください(ただし、リンクで良いフォールバックはありません)。あなたが使用することができます

$(document).on('click', '[data-submit-form]', function(e) { 
    e.preventDefault(); 
    $(this).closest('form').submit() 
} 
関連する問題