javascript - 即使只有一个被选中,jQuery 也会返回所有选中的复选框

标签 javascript jquery html json checkbox

根据这个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/

相关文章:

javascript - 如何在D3中转换不同持续时间的异物组

javascript - AngularJS 过滤器注入(inject)时抛出 "Object Uncaught"错误

javascript - 如何将我的 Gatsby 网站的索引页面设置为动态生成的页面之一?

javascript - 如何按时间戳对数组进行排序?

javascript - jQuery 根据选择显示隐藏无序列表

html - 如何显示带有换行符的文本的标签?

jquery - 添加/删除事件类 Onclick

javascript - 检查 <p> 标签占用多少行

javascript - jquery 比较 href + url 和 'contains' 问题

php - 使用 php 和 mysql 进行 Ajax 分页