根据这个JSFIDDLE --
在过去的 48 小时里,我一直在疯狂地尝试解决这个问题。除了复选框外,一切正常。我在其中包含了导致问题的独立代码片段。
在我创建框(按下复选框按钮)并完成表单后,我成功地看到了 code
并且能够将复选框序列化为 JSON
- 但是,我结束了即使只有其中一个被选中,所有复选框也会“打开”。
当我只选中一个(第一个框)而其他框未选中,并单击“保存”时,结果如下:
{"ck1":"on","ck2":"on","ck3":"on","submit1":"save"}
是什么导致了这个结果?我在这段代码中做错了什么吗?
如果您能帮助确定问题,我们将不胜感激。
我的目标是在选中第一个复选框时以这种格式查看 JSON:
{"ck1":"on","submit1":"save"}
或您建议的任何格式。
编辑:
在下面找到我指定提交事件的函数:
$('#form'+formnum).submit( function(e) {
e.preventDefault(e);
var data = {};
//Gathering the Data
$.each(this.elements, function(i, v){
var input = $(v);
data[input.attr("id")] = input.val();
//delete data[button.attr("id")]; <-- cant' figure it out
//removeData[submit] <-- cant' figure it out
}); // end of $.each
var output =JSON.stringify(data);
$('#showurl').text(output);
}); //end of 'save' button function
JSFIDDLE:jsfiddle .
最佳答案
您正在从复选框中获取值,并且无论复选框的状态如何,该值始终相同。
检查元素的类型以获取复选框的状态:
if (input.is(':checkbox')) {
if (input.is(':checked')) {
data[input.attr("id")] = input.val();
}
} else {
data[input.attr("id")] = input.val();
}
如果你只想要复选框中的数据,你可以从一开始就过滤掉选中的复选框:
$(':checked', this).each(function(i, v){ data[v.id] = v.value; });
关于javascript - 即使只有一个被选中,jQuery 也会返回所有选中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21462121/