2008-09-14 20 views
3

フォームを複数回送信するonClickイベントを作成し、複数の選択フィールドで選択したアイテムを繰り返して1回ずつ送信します。どのようにしてonClickイベントにループを作成できますか?

ループをどのようにコードするのですか?

私はRuby on Railsで作業中で、remote_function()を使用してajax呼び出しのJavaScriptを生成しています。

答えて

4

私はまだそれをコード化していないので私の素早い答えは、XMLHTTPRequestと単一の呼び出しのための特定のパラメータを使用してPOSTを作成する別の関数を作成することです。次に、選択した項目をループするときに機能するonClick()ハンドラ呼び出しの内部にあります。

私はダミーのHTMLページとjavascriptを使って概念の証明を行い、それをRoRで動作させる方法を見つけようとします。

また、RoRコントローラのループ条件を処理するのではなく、ブラウザから複数の呼び出しを試みているのはなぜですか?

2

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> 

注:選択した項目の値を取得するためにPrototypeの$F()メソッドを使用して

  • 。複数選択ボックスの配列を返します

  • Ajax.Requestを使用してPOSTとしてサーバーにデータを送信します。サーバーへの
    が、これは単なるフォームからデータを取得し、要求の体でそれを固執するForm.serializeを使用して、通常のフォームに

  • を提出するとまったく同じに見えます。あなたは、ブラウザDOMを変更している場合を除き
    これは、あなたが正常に

1

フォームを送信した場合に送信されますでしょうまったく同じデータであり、私はこれをしたいと思う理由を考えることはできません。

複数のオブジェクト(フォームのネストされた複雑なオブジェクトも含む)からのデータを、1つのPOSTだけで返すことができるはずです(この場合は、 。

レールコードは、あなたが思いつくjavascriptよりもはるかに複雑ではなく、簡単に書くことができます(デバッグしやすくなります)。

ユーザーが選択した内容に応じてページの別の部分を更新する必要がある場合は、render:updateブロックでRJSを使用してDOMに複数の更新を行うことができます。

また、複数のPOSTSを使用する必要がある複数回のトリップではなく、1回のサーバーラウンドトリップの(大きな)利点があります。

関連する問題