問題on Rails的3.0.7和jQuery 1.5.1如何更新Rails 3中AJAX提交的隱藏表單域?
概述
我嘗試做以下的事情。我有一個網頁,其中一面有一個表格,可以讓我創建一個類別,另一面有一個項目列表,每個項目都有一個複選框。我希望能夠檢查每個項目的複選框,以便當我提交表單以創建類別時,新創建的類別還通過與每個項目的關聯創建has_many。
因此,關聯部分幾乎工作,我可以提交一個選中的複選框列表,如果我發送選中的項目列表,Rails會在後端創建關聯。
問題:
這裏是行不通:
我試圖通過Ajax提交表單,所以我想將事件句柄綁定到rails.js「AJAX:beforeSend '事件,以便它將掃描我選中的複選框列表並將檢查到的ID轉換爲隱藏的表單字段。
問題是:我嘗試獲取所有選中框的列表,並在用戶單擊Submit按鈕時將它們添加到隱藏字段中。因此,我想我會把代碼放在ajax:beforeSend事件處理程序中。我注意到的是,我注意到的是,rails.js已經處理了表單字段,並且在處理器觸發之前構造了HTTP查詢。我通過以下行爲注意到這一點:
觀測到的行爲
1)我可以重新加載一個新的頁面,單擊按鈕提交表單,從我的處理程序的警告框彈出說,沒有框是檢查,並在我的分貝創建的類別沒有關聯的項目(正確行爲)
2)我然後單擊1複選框,彈出警告框顯示哪些框檢查(正確)。但是,當我提交表格時,數據庫中的類別仍然沒有關聯項目。我可以看到通過螢火蟲和服務器日誌,併發送HTTP查詢包含舊的參數列表,而不是較新的。 (錯誤)
3)然後我再次提交相同的表格,不做任何更改,它顯示了正確的項目數。
所以我覺得參數結構比較滯後。我希望這不會太長,一個人可以幫我弄清楚發生了什麼。
我的問題:
什麼事件,我需要綁定,這樣的形式被用正確的參數提交?或者還有另外一種方式可以完全解決這個問題嗎?
謝謝
這是我的代碼如下。
感謝,
$('#my_form')
/* Now we need to configure the checkboxes to create an association between
* the items, and the interaction that is being created. First we will bind a
* function to the click event, and if the box is then checked, we will add
* the item id to the list of interaction items. If it is unchecked, we will
* remove the item from the list of interaction items.
*/
.live('ajax:beforeSend', function(event){
// First get a list of all the checked Items
var checked_items = new Array();
$('#items input[type="checkbox"]:checked').each(function(){
checked_items.push(this.getAttribute('data-item-id'));
});
// Then add this list of items to the new_interaction form to be submitted
$('#interaction_new_items').val(checked_items);
alert(checked_items);
alert($('#interaction_new_items').val());
})
真棒!謝謝!!!我怎樣才能找出事件的處理順序,以供將來參考? – noli 2011-04-28 14:35:22
我會假設ajax:beforeSend在窗體被序列化後被調用,所以這可能會起作用。 – 2011-04-28 14:35:37
ajax:beforeSend是一個jQuery事件。由於JavaScript是自己的序列化表單,然後使用jQuery通過Ajax提交,所以沒有相應的jQuery事件來滿足你的需求。 – 2011-04-28 14:39:26