Jquery - 未经“检查”的SerializeArray()复选框

时间:2011-09-09 19:38:56

标签: javascript jquery html jquery-mobile

所以我试图实现Jquery .serializeArray()方法将表单转换为JSON字符串,以便在请求中将其发送出去。这对我的表单很有用,除了复选框和单选按钮。这个工作正常的唯一时间是检查它们。有时,我需要知道它们是否未经检查。他们仍然需要序列化。

我想我可以手动遍历表单并获取值并构建JSON对象,但这不是最佳的。

根据此处的Jquery文档:Jquery Docs任何符合W3标准的成功控制found here都应包括在内。不幸的是,这不包括未选中的复选框。有没有人解决这种行为?提前谢谢......


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

使用未选中的复选框排除序列化表单...

4 个答案:

答案 0 :(得分:3)

如果您确实想使用复选框和单选按钮,请让这些输入字段更新相应的隐藏字段。这样,隐藏的输入将始终发送。

答案 1 :(得分:2)

尝试这个怎么样,我遇到了类似的问题,我认为未经检查的复选框也应该有一个值,这是一个快速的解决方法,     在表单“cbx”上的每个复选框上添加一个额外的类     使用serialise

从表单中创建数据数组

然后使用“cbx”类循环遍历所有复选框 并使用(serializeArray())创建数组后,将它们添加到值为0的数组中

当您发布数据时,您将看到未经检查的checbox,并且0的值将随帖子一起传输。

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

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

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

答案 2 :(得分:2)

另一种方法是使用jQuery插件。例如,serializeJSON可以选择为未选中的复选框设置值,如下所示:

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

在任何情况下,通常最好对未经检查的值使用隐藏输入。

答案 3 :(得分:0)

好吧,所以我开发了一种解决方法。

基本上我编写了一个函数来将原始JSON对象与序列化表单进行比较。当我循环时,我比较了组件。如果存在差异,我将组件从表单中拉出并手动将其插入JSON中。我使用array.splice()方法添加缺少的组件。为所有缺失的输入工作。