Javascript 分组复选框选择

Javascript 分组复选框选择,javascript,jquery,Javascript,Jquery,我有一系列的复选框,我正试图按它们的名称对选择进行分组,并将选择存储为一个集合。所以我想要的最终输出是这样的 { 'E113': [{'id':'sxk1', value: '19'}, {'id':'sxk22', value: '29'}], 'E013': [{'id':'kxk1', value: '22'}, {'id':'sxk3', value: '15'}] } 事实上,情况并非如此。它会在这些数组周围添加“”,如果我只选中一个复选框,则不会将其包装到数组中 这是我的JS $(

我有一系列的复选框,我正试图按它们的名称对选择进行分组,并将选择存储为一个集合。所以我想要的最终输出是这样的

{
'E113': [{'id':'sxk1', value: '19'}, {'id':'sxk22', value: '29'}],
'E013': [{'id':'kxk1', value: '22'}, {'id':'sxk3', value: '15'}]
}
事实上,情况并非如此。它会在这些数组周围添加“”,如果我只选中一个复选框,则不会将其包装到数组中

这是我的JS

$(".checkbox").click(function() {

      var selectionForm = JSON.stringify($('#form').serializeObject())
      console.log(selectionForm)

    })

$.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    }; 
这是我的小提琴

下面是我如何得到我的标记

<form id="form">

<input type="checkbox" class="checkbox" name="E113" value="{'id':'sxk1', value: '19'}"/>
<input type="checkbox" class="checkbox" name="E113" value="{'id':'sxk22', value: '29'}"/>
<input type="checkbox" class="checkbox" name="E013" value="{'id':'kxk1', value: '22'}"/>
<input type="checkbox" class="checkbox" name="E013" value="{'id':'sxk3', value: '15'}"/>

</form>

$('.checkbox')。在('click',function()上{
var o={};
$('.checkbox:checked')。每个(函数(){
var n=$(this.attr(“name”),
//将您的值转换为有效的JSON(否则,我们必须使用eval,不):
v=$(this.val().replace(/\'/g'”).replace(/value:/,'value:');
if(o[n]){
o[n].push(JSON.parse(v));
}否则{
o[n]=[JSON.parse(v)];
}
});
$('.output').html(JSON.stringify(o));
});

$('.checkbox')。在('click',function()上{
var o={};
$('.checkbox:checked')。每个(函数(){
var n=$(this.attr(“name”),
//将您的值转换为有效的JSON(否则,我们必须使用eval,不):
v=$(this.val().replace(/\'/g'”).replace(/value:/,'value:');
if(o[n]){
o[n].push(JSON.parse(v));
}否则{
o[n]=[JSON.parse(v)];
}
});
$('.output').html(JSON.stringify(o));
});

您编写的JSON使用单引号
无效,您应该使用双引号
。您的
值也需要引号

<input type="checkbox" class="checkbox" name="E113" value='{"id":"sxk1", "value": "19"}'/>
<input type="checkbox" class="checkbox" name="E113" value='{"id":"sxk22", "value": "29"}'/>
<input type="checkbox" class="checkbox" name="E013" value='{"id":"kxk1", "value": "22"}'/>
<input type="checkbox" class="checkbox" name="E013" value='{"id":"sxk3", "value": "15"}'/>

然后,在向现有数组追加/推送数据时,使用
JSON.parse
检索Javascript对象而不是文本字符串:
JSON.parse(this.value)


修正错误:

您编写的JSON使用单引号
,这是无效的,您应该使用双引号
”。您的
值也需要引号

<input type="checkbox" class="checkbox" name="E113" value='{"id":"sxk1", "value": "19"}'/>
<input type="checkbox" class="checkbox" name="E113" value='{"id":"sxk22", "value": "29"}'/>
<input type="checkbox" class="checkbox" name="E013" value='{"id":"kxk1", "value": "22"}'/>
<input type="checkbox" class="checkbox" name="E013" value='{"id":"sxk3", "value": "15"}'/>

然后,在向现有数组追加/推送数据时,使用
JSON.parse
检索Javascript对象而不是文本字符串:
JSON.parse(this.value)


修复了小提琴:

我看不到任何小提琴。@ZakariaAcharki--我忘了添加它:-)…只是用它更新了问题。在这里,我看不到任何小提琴。@ZakariaAcharki——我忘了添加它:-)…只是用它更新了问题。不管怎样都可以