我有一系列复选框,我正在尝试按名称对选择进行分组,并将选择存储为集合。所以我追求的最终输出是这样的
welcome
实际上它并没有那样发生。它在这些数组周围添加“”,如果我只选择一个复选框,则不会将其包装在数组中。
这是我的JS
{
'E113': [{'id':'sxk1', value: '19'}, {'id':'sxk22', value: '29'}],
'E013': [{'id':'kxk1', value: '22'}, {'id':'sxk3', value: '15'}]
}
这是我的小提琴
https://jsfiddle.net/sghoush1/xLxezzLz/1/
以下是我的标记
$(".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;
};
答案 0 :(得分:2)
您编写的JSON使用单引号'
这是无效的,您应该使用双引号"
。您的value
也需要报价。
<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)
答案 1 :(得分:1)
$('.checkbox').on('click', function() {
var o = {};
$('.checkbox:checked').each(function() {
var n = $(this).attr("name"),
// Convert your value into valid JSON (otherwise we'd have to use eval, which, no):
v = $(this).val().replace(/\'/g,'"').replace(/value:/,'"value":');
if (o[n]) {
o[n].push(JSON.parse(v));
} else {
o[n] = [JSON.parse(v)];
}
});
$('.output').html(JSON.stringify(o));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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'}" />
<div class="output"></div>
&#13;
如果你清理输入数据,你可以避免使用其中一些正则表达式(使用有效的JSON而不是引用和未引用字段的混合。)其余的非常简单,我假设不言自明。