onClick
フォームを複数回送信し、複数選択フィールドで選択した項目を繰り返し、それぞれに1回送信するイベント を作成したいと思います。
ループをコーディングするにはどうすればよいですか?
私はRubyonRailsで作業してremote_function()
おり、ajax呼び出し用のJavaScriptを生成するために使用しています。
onClick
フォームを複数回送信し、複数選択フィールドで選択した項目を繰り返し、それぞれに1回送信するイベント を作成したいと思います。
ループをコーディングするにはどうすればよいですか?
私はRubyonRailsで作業してremote_function()
おり、ajax呼び出し用のJavaScriptを生成するために使用しています。
私の簡単な答えは(まだコーディングしていないので)、XMLHTTPRequestと単一の呼び出しの特定のパラメーターを使用してPOSTを作成する別の関数を作成することです。次に、onClick()ハンドラー内で、選択したアイテムをループしながらその関数を呼び出します。
ダミーのHTMLページとjavascriptを使用して概念実証を行い、それをRoRで機能させる方法を理解することをお勧めします。
また、RoRコントローラーでループ状態を処理するのではなく、ブラウザーから複数の呼び出しを行おうとしているのはなぜですか?
いくつかの JavaScript を手動で作成する必要があります。Rails のジェネレーターは、これほど複雑なことは行いません。
ただし、Prototype.js はほとんどすべての面倒な作業を行います。私の頭の上から、コードは次のようになります: (未テスト)
<%= javascript_include_tag 'prototype' %>
<form id="my-form">
<input type="text" name="username" />
<select multiple="true" id="select-box">
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
<option value="4">Fourth</option>
</select>
</form>
<script type="text/javascript" language="javascript">
submitFormMultipleTimes = function() {
$F('select-box').each(function(selectedItemValue){
new Ajax.Request('/somewhere?val='+selectedItemValue,
{method: 'POST', postBody: Form.serialize('my-form')});
});
}
</script>
<a href="#" onclick="submitFormMultipleTimes(); return false;">Clicky Clicky</a>
ノート:
プロトタイプの$F()
メソッドを使用して、選択したアイテムの値を取得します。複数選択ボックスの配列を返します
を使用Ajax.Request
して、データを としてサーバーに送信しますPOST
。
サーバーにとって、これは通常のフォームを送信するのとまったく同じに見えます
Form.serialize
フォームからデータを取得し、リクエストの本文に貼り付けるために使用します。
これは、通常どおりにフォームを送信した場合に送信されるデータとまったく同じです。
ブラウザーの DOM を変更しない限り、これを行う理由は思い浮かびません。(しかし、あなたが何をしようとしているのかを完全に知らなければ、この場合は間違っている可能性があります =)
複数のオブジェクト (フォーム内のネストされた複雑なオブジェクトであっても) からデータを 1 回の POST で送り返すことができるはずです。
おそらく、Rails のコードは、あなたが思いついたどの JavaScript よりもはるかに単純で、書きやすく (そしてデバッグも簡単です!) なるでしょう。
ユーザーが選択した内容に応じてページのさまざまな部分を更新する必要がある場合でも、render :update ブロックで RJS を介して DOM に複数の更新を行うことができるため、問題にはなりません。
また、複数の POSTS を使用する必要がある複数の往復ではなく、1 回のサーバー往復で済むという (大きな) 利点もあります。