0

我正在尝试遍历表单中的复选框并将它们的值添加到多维 javascript 对象中。' attrib' 数据属性将是关键。可能的键值是 ' category'、' product_group' 和 ' language' 但我宁愿动态添加它们,以防将来添加更多。

我想最终得到一个像这样的对象,我可以轻松地将它作为 json_encode 的单个值发送到服务器。

values = {
    'category' : {1,2,3},
    'product_group' : {4,5,6},
    'language': {'en','fr','de'}
};

代码如下。显然,每次迭代都会覆盖现有值而不是添加到现有值。我不确定在哪里可以创建 values[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) 
})
4

4 回答 4

4

您的错误是由于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)
        }
于 2013-09-02T12:46:27.683 回答
0

不确定这就是您要查找的内容:

if(!values[key])
   values[key]=new Array();

values[key].push(value);

但是通过这种方式,您可以为每个键添加一个值数组。

于 2013-09-02T12:46:13.850 回答
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
        }       
于 2013-09-02T12:46:49.327 回答
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) 

})

于 2013-09-02T12:53:20.787 回答