分组复选框选择
问题描述:
我有一系列的复选框,我试图按照名称对选择进行分组,并将选择作为集合存储。所以,我之后的最终输出是这样的分组复选框选择
{
'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;
};
,这里是我的小提琴
https://jsfiddle.net/sghoush1/xLxezzLz/1/
这里是我有我的标记
<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>
答
你写的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)
答
$('.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));
});
<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>
你可以避开一些那些正则表达式,如果你清理你的输入数据(使用有效的JSON,而不是报价,不带引号的字段的混合物。)其余部分是相当简单的,我想不言自明。
我看不到任何小提琴。 –
@ZakariaAcharki - 我忘了补充一下:-) ...只是用它更新了问题。这里是任何方式https://jsfiddle.net/sghoush1/xLxezzLz/1/ – soum