所以我试图实现Jquery .serializeArray()方法将表单转换为JSON字符串,以便在请求中将其发送出去。这对我的表单很有用,除了复选框和单选按钮。这个工作正常的唯一时间是检查它们。有时,我需要知道它们是否未经检查。他们仍然需要序列化。
我想我可以手动遍历表单并获取值并构建JSON对象,但这不是最佳的。
根据此处的Jquery文档:Jquery Docs任何符合W3标准的成功控制found here都应包括在内。不幸的是,这不包括未选中的复选框。有没有人解决这种行为?提前谢谢......
var form = document.getElementById('f');
console.log($(form).serializeArray();
使用未选中的复选框排除序列化表单...
答案 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()
方法添加缺少的组件。为所有缺失的输入工作。