2011-09-09 143 views
2

所以我試圖實現Jquery .serializeArray()方法將表單轉換爲JSON字符串以在請求中發送它。這對我的表單非常有用,除了複選框和單選按鈕。唯一能正常工作的時間是檢查時。有時候,我需要知道他們是否沒有被檢查。他們仍然需要序列化。Jquery - 沒有「檢查」的SerializeArray()複選框

我想我可以手動循環表單並獲取值並構建JSON對象,但那不是最優的。

根據這裏找到的jquery文檔:Jquery Docs任何符合W3標準的成功控件found here都應該包含在內。不幸的是,這不包括未被選中的複選框。有沒有人有這種行爲的工作?在此先感謝...


var form = document.getElementById('f'); 
console.log($(form).serializeArray(); 

那吐出來與不檢查排除複選框序列化格式...

+0

與此類似:http://stackoverflow.com/questions/3029870/jquery-serialize-does-not-register-checkboxes – CAbbott

+0

獲取代碼? 132456 – Incognito

+0

大聲笑,我做,但它不是很有趣。你需要知道的一切都在那裏。我會盡快更新它... – gabaum10

回答

0

好的,所以我開發了一個解決方法。

基本上我寫了一個函數來比較原始JSON對象序列化的形式。當我循環時,我比較了組件。如果出現差異,我將組件從表單中取出並手動插入到JSON中。我使用了array.splice()方法來添加缺少的組件。爲所有缺失的輸入工作。

3

如果你真的想使用複選框和單選按鈕,有那些輸入字段更新相應的隱藏字段。這樣,隱藏的輸入將始終發送。

2

怎麼想這個問題,我也有類似的問題,我想選中複選框都應該有一個價值好,這裏是一個快速的解決辦法, 表單上的每個複選框添加一個額外的類「CBX」 使數據從表單的陣列與串行化處理

然後通過具有類的「CBX」 所有複選框循環並把它們添加到陣列爲0的值,在將陣列已經用(serializeArray())

創建

當您發佈數據時,您將看到未檢查的checboxes,0的值將隨帖子轉移。

var data = $('#form').serializeArray(); 

    $(".cbx:not(:checked)").each(function() { 
     data.push({name: this.name, value: '0' }); 
    }); 

    $.post("testpage.asp", data); 
2

另一種方法是使用jQuery插件。例如,serializeJSON具有設置爲未選中複選框的值這樣的選項:

$('form').serializeJSON({checkboxUncheckedValue: "false"}); 

在任何情況下,通常最好使用隱藏的輸入爲未選中狀態的值。