2012-07-03 68 views
0

我正在使用jQuery serialize()函數來收集表單中的數據,並使用jQuery Ajax「post」方法提交給服務器,如下所示:var params = jQuery('#mainContent form').serialize();
我看到的奇怪之處在於我的表單中的序列化數據包含舊數據。這意味着,我所有的表單變化(輸入到文本字段,在組合框中選擇)都不存儲到DOM,所以當jQuery調用serialize()時,它會收集在更改表單之前出現的舊數據。我試圖檢查這種形式的每個元素,並呼籲.val(),它仍然顯示了舊的價值觀。
那麼如何堅持我所有的修改形式,serialize()方法可以用我輸入的最新數據構建字符串?
這裏是我的代碼段,我叫serialize()內提交處理jQuery:在序列化之前持久化表單值?

jQuery('.myFormDiv input.submit').click(function() { 
    // Do something 
    // Collect data in form 
    var params = jQuery('#mainContent form').serialize(); 
    // Submit to server 
    jQuery.post(url, params, successHandler); 
} 

太謝謝你了。

+0

你可以上傳你的代碼(或簡化版本)爲jsfiddle嗎? – Samuel

+0

你叫'$(document).ready'嗎? – undefined

回答

2

你什麼時候調用序列化?它應該是$('form')。submit([here]);這聽起來像是在頁面加載時調用它,然後再將值輸入到字段中,然後再使用。

編輯:

使用submit event而不是在點擊會趕上有人打在文本框中輸入。

jQuery('#mainContent form').submit(function() { 
    // Collect data in form 
    var params = jQuery(this).serialize(); 
    // Submit to server 
    jQuery.post(url, params, successHandler); 
} 

*上面的代碼假定URL是定義和successHandler是一個函數。

+0

儘管可以使用表單的提交事件而不是提交按鈕的點擊事件,但它不太可能對序列化表單中的值產生任何影響 - 點擊提交按鈕和表單之間的差異不大提交。儘管它會確保OP在提交選擇符不同的情況下不會從按鈕提交錯誤的表單。 – RobG

+0

@RobG的確。正如我所說,它聽起來像序列化正在頁面加載或之前的某個點被調用。只是舉一個完整的例子來說明我如何提到。 – Samuel