Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery将复选框返回为全部选中,即使只选中了一个复选框_Javascript_Jquery_Html_Json_Checkbox - Fatal编程技术网

Javascript jQuery将复选框返回为全部选中,即使只选中了一个复选框

Javascript jQuery将复选框返回为全部选中,即使只选中了一个复选框,javascript,jquery,html,json,checkbox,Javascript,Jquery,Html,Json,Checkbox,照此-- 在过去的48小时里,我一直在疯狂地想办法解决这个问题。除了复选框外,其他一切都正常。我在本文中包含了导致问题的独立代码片段 在我创建了复选框(按下复选框按钮)并完成表单后,我成功地看到了code,并且能够将复选框序列化为JSON——但是,即使只选中了其中一个复选框,我最终还是对所有复选框都“启用” 当我只选中一个(第一个框)和其他未选中的框,并单击“保存”时,我得到以下结果: {“ck1”:“on”,“ck2”:“on”,“ck3”:“on”,“submit1”:“save”} 是什么

照此--

在过去的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
$('#表单'+formnum).提交(函数(e){
e、 防止违约(e);
变量数据={};
//收集数据
$.each(该元素、函数(i、v){
变量输入=$(v);
数据[input.attr(“id”)]=input.val();

//删除数据[button.attr(“id”)];您任意分配所有输入的值,而不是实际检查
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();
}

您还需要单选按钮的例外情况。

您从复选框中获取值,并且无论复选框的状态如何,该值始终相同

选中元素的类型以获取复选框的状态:

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; });

即使你提供了一个提琴,你也应该在问题本身中发布相关代码。仅链接的问题和答案不符合网站指南,因为如果链接中断,这些问题和答案将变得无用。你想要这样做:?你的复选框缺少id.data[input.attr(“id”)| input.attr(“name”)]应该修复它@lvaroG.Vicario-谢谢你的指针。编辑。为什么做:勾选两次。而且他在复选框上没有id。attr('name')应该可以工作。@AamirAfridi:你在哪里看到
:勾选了两次?如果你再看一次,你会发现复选框上实际上有一个id,但没有名字,所以
attr('id”)
工作和
attr(“名称”)
没有。@AamirAfridi:检查
:checkbox
是为了确定它是否是复选框,检查
:checked
是为了确定它是否被选中。如果只选中一个复选框,则会将未选中的复选框作为其他元素处理,并且它们最终会出现在数据对象中。因为代码必须ndle不仅仅是复选框,还需要两个复选框。如果您这样做是(“:checked”),那就足够了:)同样在他的第一个版本中,他有名字和每个人的idcheckbox@AamirAfridi:在问题的示例中,包含提交按钮。某些服务器代码使用按钮中的值来确定请求的原因,在这种情况下,必须包含该值才能使服务器代码正常工作。单选部分对我有效,没有问题。请参阅s fiddle:不,实际上没有,它有完全相同的问题。如果你不检查任何单选按钮,它们将显示其值。如果你组成一个组,该值将是最后一个单选按钮,即使它未被选中。