jQuery从复选框到数组获取复杂的多个选中值

时间:2015-01-02 15:07:28

标签: jquery arrays object checkbox

我想在选择复选框时动态显示与访问者选择相关的网站内容。在Ajax和php端发送信息没问题。但我无法在jQuery中创建一个我想要的数组。

HTML:

<div id="filter">
    <div class="sizes">
        <input type="checkbox" data-group="size_catalog" data-value="32">
        <input type="checkbox" data-group="size_catalog" data-value="36">
        <input type="checkbox" data-group="size_catalog" data-value="38">
        <input type="checkbox" data-group="size_catalog" data-value="40">
    </div>
    <div class="colors">
        <input type="checkbox" data-group="color_catalog" data-value="red">
        <input type="checkbox" data-group="color_catalog" data-value="blue">
        <input type="checkbox" data-group="color_catalog" data-value="black">
    </div>
</div>

我希望拥有多个数组的对象(必须对相同的数据组进行分组):

var myArray = {size_catalog : ["32", "36", "38"], color_catalog: [red, blue]};

我目前的代码(可在互联网上找到并改编)创建一个简单的数组:

    function getChecked(){
        var opts= [];
        $checkboxes.each(function(){
            if(this.checked){
                opts.push(this.value);
            }
        });
        return opts;
    }

    function updateSearch(opts){
        $.ajax({
            type: "POST",
            url: "class.search.php",
            dataType : 'json',
            cache: false,
            data: {filterOpts: opts},
            success: function(records){
                ...
            }
        });
    }

    var $checkboxes = $("input:checkbox");
    $checkboxes.on("change", function(){
        var opts = getChecked();
        updateSearch(opts);
    });

    updateSearch();

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

你可以通过迭代和创建一个以size-catalog为键的对象,以及一个数组作为值来实现。

var $checkboxes = $("input:checkbox");

$checkboxes.on('change', function() {
    var obj = {};

    $checkboxes.filter(':checked').each(function() {
        var n = $(this).data('group'),
            v = $(this).data('value');

        n in obj ? obj[n].push( v ) : obj[n] = [v];
    });

    $.post('class.search.php', {filterOpts: obj}, 'json').done(function(records) {

    });

});

FIDDLE

答案 1 :(得分:0)

这不是一个多维数组,即一个包含2个不同数组的对象。如果你想要的话,那就是你想要的东西:

function getChecked() {
  var sizeArray = [];
  var colorArray = [];

  $checkboxes.each(function() {
    if ($(this).is(':checked')) {
      if ($(this).data('group') == 'size_catalog')
        sizeArray.push($(this).data('value'));
      else if ($(this).data('group') == 'color_catalog')
        colorArray.push($(this).data('value'));
    }
  });

  return {
    size_catalog: sizeArray,
    color_catalog: colorArray
  };
}

Here is a working example