2008-09-14 59 views
3

我想寫一個onClick事件,它會多次提交一個表單,迭代多選字段中的選定項目,併爲每個字段提交一次。如何在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獲取數據的表格,並把它貼在請求的身上。
    這是,如果你提交的表單通常

1

除非你修改瀏覽器的DOM將被髮送完全相同的數據,我不能想到的,你會想這樣做的理由。 (但是不知道你想做什麼,在這種情況下我可能是錯的=)

你應該能夠從一個POST中的多個對象(甚至嵌套在表單中的複雜對象)發回數據。

很可能rails代碼比起你想出的任何javascript來說都複雜得多,編寫起來更容易(也更容易調試!)。

如果您需要根據用戶選擇的內容更新頁面的不同部分,仍然可以在render:update模塊中通過RJS對DOM進行多次更新,所以這不應該成爲問題。

您還可以享受只有一次服務器的(大)收益,而不是使用多個POSTS的多次旅行。

相關問題