2012-03-13 11 views
0

私は、ユーザーが電子メールアドレスと会社情報などの情報を入力するフォームを持っています。ユーザーは情報を保存するだけのオプションがあります。または、入力したばかりの会社にメールを送信する別のボタンをクリックします。javascript(coffeescript/rails)を使用して2つの異なるフォームを送信します。最初は保存された情報に応じて2番目のフォーム

これを解決するには2つの形式があります。最初のものはすべての会社情報を含んでいます。 2番目は電子メール要求コントローラを投稿する隠しフォームです。

私は2番目のフォームを非表示にするので、ユーザーは最初のフォームのみを表示し、メールを送信するために使用される非表示のボタンを配置します。

ボタンには、以下のCoffeeScriptをトリガー:

$('#send_email_request').click(-> 
    $('#send_email_request').off('click'); 
    $('#send_email_request').attr('disabled', true); 
    $('.save_reference').submit(); 
    $('.request_information_email_form').submit(); 
) 

問題がrequest_information_email_formがsave_reference_form前に実行されているいくつかの理由です。 request_information_emailコントローラの電子メールアドレスと会社情報にアクセスできるように、save_referenceフォームを最初に実行する必要があります。

これについては間違っていますか?

ありがとうございます!このようなフォームを送信ライアン

+0

本当に隠されたフォームが必要ですか?目に見えるフォームタグのアクション(url)と、おそらく隠されたタグの値を変更して、クリックされたものを知り、それを送信することはできませんか? –

+1

もしあなたが別のボタンが常に参照を保存し、メールを送信し、次にサーバー側でそれを行うと思うなら、クライアント側からトリガーするのではなく、すべての参照を保存してメールを送信してください。 – manny

答えて

2

私はあなたの問題を理解しているので、ユーザーは第2フォームにデータを入力する必要はありません。

2つの送信ボタンがあるフォームを使用するだけで、電子メール情報に名前属性を要求するボタンを付けることができます。次に、コントローラのnewの動作でparams[:name].nil?をチェックし、他のコントローラにリダイレクトするか、それぞれの機能を呼び出します。

0

は、ブラウザ現在のウィンドウは、HTTP POSTリクエストをするつもりであることを意味します。これは、フォームのアクションプロパティで記述されたURLアドレスにウィンドウがリダイレクトされることを意味します。ブラウザのウィンドウは2つのアドレスに同時に存在することはできませんので、2つのフォームを送信しようとする方法はできません。

代わりに、まず各フォームの内容を「シリアル化」してから、2つの別々のAJAXリクエストを実行する必要があります。シリアル化されたデータは、各要求でPOSTパラメータとして配置する必要があります。

フォームをシリアライズする方法とAJAXリクエストを行う方法の詳細については、jQuery documentationを参照してください。

+0

RailsのUJSのstuff + jQueryのレールを使って、2つのリクエストを多大な労力をかけずに処理できます.jqueryのujsに関するドキュメントを見てください:https://github.com/rails/jquery-ujs/wiki /邪魔にならないスクリプティングのためのjQueryのサポート –

関連する問題