获取选中:复选框并将它们放入数组中(取决于最接近的UL)

时间:2017-02-13 08:28:33

标签: jquery checkbox

我正在尝试构建一个网页,通过Ajax调用PHP发布过滤器并操纵要显示的数据。

这是我用来获取值/数据的代码。

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

$checkboxes.on("change", function()
{
    var opts = getFilterOptions();          
 });


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

我很难用复选框(我使用jQuery btw)。我希望将检查项目的ID与最接近的'ul'结合起来。 我试着用

opts.push(this.closest('ul').id, this.id);

但后来我得到了重复的数组名称。 E.g:

[0 => 'category: item1']
[1 => 'category: item2']
[2 => 'category: item3']
[3 => 'othercategory: value1']
[4 => 'othercategory: value2']

我也试过(不是那么动态但硬编码的解决方案:)。

function getFilterOptions()
{
 var opts = [];

 var activity = $('input:checkbox:checked.activity').map(function () 
 {
     return this.id;
 }).get();
 console.log(activity);
 return activity;

 var othercategory = $('input:checkbox:checked.othercategory').map(function () 
 {
    return this.id;
 }).get();
 console.log(othercategory);
     return othercategory;
}

但这仅记录第一个复选框而不记录第二个(othercategory)。

我想选择'ul'中的所有类别。例如:

['category (ul)']
    [0 => 'item1', 1 => 'item2']
['othercategory (a other ul)']
    [0 => 'value1', 1 => 'value2']

What I try to accomplish

1 个答案:

答案 0 :(得分:0)

你混淆了jQuery和DOM方法。 closest()是一种jQuery方法,因此您需要在$(this)上调用它,而不是thisid是一个DOM属性,你不能在jQuery对象上调用它。所以它应该是:

opts.push($(this).closest("ul").attr("id"), this.id);

但看起来你不应该使用数组,你需要一个对象,其键是类别。

var opts = {};
$checkboxes.filter(":checked").each(function() {
    var cat = $(this).closest("ul").attr("id");
    if (!opts[cat]) {
        opts[cat] = [];
    }
    opts[cat].push(this.id);
});