即使只检查了一个,jQuery也会返回复选框

时间:2014-01-30 16:33:13

标签: javascript jquery html json checkbox

根据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

2 个答案:

答案 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();
}

您还需要单选按钮例外。