我正在尝试遍历表单中的复选框,并将它们的值添加到多维javascript对象中。 “attrib
”数据属性将成为关键。可能的关键值是“category
”,“product_group
”和“language
”,但我宁愿动态添加它们以防将来再添加。
我希望得到一个这样的对象,我可以轻松地将其作为json_encode的单个值发送到服务器。
values = {
'category' : {1,2,3},
'product_group' : {4,5,6},
'language': {'en','fr','de'}
};
以下代码。显然,每次迭代都会覆盖现有值,而不是添加到现有值。我不确定在哪里可以创建值[key]作为对象......?
$('.filter input, .multiselect-container input').change(function() {
var values = {}
$('.filter input:checked').each(function() {
if($(this).is(':checked')) {
var key = $(this).data('attrib')
var value = $(this).val()
values[key] = value
// values[key].push(value) = calling method push of undefined ...
}
else {
// Remove value
}
})
console.log(values)
})
答案 0 :(得分:3)
您的错误是由于values[key]
为undefined
,因此没有push
方法。
试试这段代码:
if($(this).is(':checked')) {
var key = $(this).data('attrib')
var value = $(this).val()
values[key] = values[key] || [] // initialize with empty array
values[key].push(value)
}
答案 1 :(得分:0)
不确定这是你在找什么:
if(!values[key])
values[key]=new Array();
values[key].push(value);
但是这样你可以为每个键添加一个值数组。
答案 2 :(得分:0)
试试这个:
if($(this).is(':checked')) {
var key = $(this).data('attrib')
var value = $(this).val()
if(typeof values[key] == "undefined")
values[key] = [];
values[key].push(value);
}
else {
// Remove value
}
答案 3 :(得分:0)
首先,您的数据表示不正确。对象属性应该是这样的数组:
values = {
'category' : [1,2,3],
'product_group' : [4,5,6],
'language': ['en','fr','de']
};
使用该数据表示,这段代码将满足您的需求:
$('.filter input, .multiselect-container input').change(function() {
var values = {}
$('.filter input:checked').each(function() {
if($(this).is(':checked')) {
var key = $(this).data('attrib')
var value = $(this).val()
values[key] = value
if (values.key == undefined){
//Check if key exists. If not, create it as an array
values[key] = Array()
values[key].push(value)
}
else{
values[key].push(value)
}
}
else {
// Remove value
}
})
console.log(values)
})