Javascript 即使未选中任何复选框,也要定义数组
我有以下HTML:Javascript 即使未选中任何复选框,也要定义数组,javascript,jquery,html,Javascript,Jquery,Html,我有以下HTML: <form id="download"> <label> <input name="docs" id="doc1" value="doc1" type="checkbox">File 1 </label> <label> <input name="docs" id="doc2" value="doc2" type="checkbox">File 2 &l
<form id="download">
<label>
<input name="docs" id="doc1" value="doc1" type="checkbox">File 1
</label>
<label>
<input name="docs" id="doc2" value="doc2" type="checkbox">File 2
</label>
<button class="button" type="submit">Download</button>
</form>
当我选中这两个复选框时,控制台上会显示以下内容:
Object { names: [ "doc1", "doc2" ] }
如果我只选择一个复选框,我会得到:
Object { names: "doc1" }
我需要“名称”始终是一个数组,因为后端需要它
因此,如果我只选择一个,我将得到:
Object { names: [ "doc1" ] }
或者如果我没有选择任何复选框,则:
Object { names: [] }
解决此问题的最佳方法是什么?只需在代码中添加一个复选框:
formData = $form.serializeToJSON()
if (!formData.docs) {
formData.docs = [];
} else if (typeof formData.docs == "string") {
formData.docs = [formData.docs];
}
$.ajax({
url: "/download",
data: JSON.stringify(formData),
dataType: "json",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
type: "post"
})
.done(function (data, status, xhr) { })
.fail(function (xhr, status, error) { });
自定义配置可能是您在这里的最佳选择。所以我应该检查是否没有定义文档,或者是否只有一个项目?如何检查序列化之前是否只选择了一项?我认为Barmar的回答涵盖了这一点。您的代码只考虑没有选中复选框的情况。但当只有一个数组时,我还需要一个数组,它以字符串的形式发送。检查我的初始问题:对象{names:“doc1”}尝试对表单字段使用数组样式名称:
name=“docs[]”
OK,然后只需添加一个字符串检查并将其更改为数组即可。我已经更新了code.BTW,您不需要Accept:application/json
。当您使用数据类型:“json”
时,jQuery会自动执行此操作。
formData = $form.serializeToJSON()
if (!formData.docs) {
formData.docs = [];
} else if (typeof formData.docs == "string") {
formData.docs = [formData.docs];
}
$.ajax({
url: "/download",
data: JSON.stringify(formData),
dataType: "json",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
type: "post"
})
.done(function (data, status, xhr) { })
.fail(function (xhr, status, error) { });