2011-09-09 88 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"}); 

在任何情况下,通常最好使用隐藏的输入为未选中状态的值。