我正在尝试构建一个网页,通过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']
答案 0 :(得分:0)
你混淆了jQuery和DOM方法。 closest()
是一种jQuery方法,因此您需要在$(this)
上调用它,而不是this
。 id
是一个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);
});