根据JSFIDDLE -
在过去的48小时里,我一直在疯狂地试图解决这个问题。除了复选框,一切正常。我包含了导致此问题的孤立代码片段。
在我创建了框(按下复选框按钮)并完成表单后,我成功地看到code
并且能够将复选框序列化为JSON
- 但是,我最终获得了'on'所有复选框即使只检查其中一个。
当我只检查一个(第一个方框)和其他方框未选中,然后点击“保存”时,我得到了结果:
{"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。
答案 0 :(得分:1)
您从复选框中获取值,无论复选框的状态如何,值始终相同。
检查元素的类型以获取复选框的状态:
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; });
答案 1 :(得分:0)
您正在任意分配所有输入的值,而您实际上并未检查checked
状态。
为:
添加条件行data[input.attr("id")] = input.val();
类似的东西:
if (/* (input is a checkbox and checkbox is checked) or input is not a checkbox*/) {
data[input.attr("id")] = input.val();
}
您还需要单选按钮例外。