【发布时间】:2016-03-14 19:41:01
【问题描述】:
我有一个作为类别过滤器的输入复选框。我只想将输入复选框的值存储在一个数组中,这些值在var checkedAttr 中检查。然后进行测试,如果任何已经存在的值与数组中的任何值匹配,并且是否删除它。我遇到的问题是...当单击输入复选框时,它将存储它的次数与$each 循环或输入复选框的次数一样多,在这种情况下(三次)。我还注意到,当取消选中多个,然后重新选中同一个时,它会添加与 $each 循环一样多次的值,并且会以某种方式绕过从数组中删除。每次用户检查或取消检查时,我只想简单地从数组中添加(检查值)/删除(未检查值)。
这是jsfiddle。
HTML:
<div id="category-list">
<h1>Categories</h1>
<input class="categories" type="checkbox" name="filter" value="Math" checked>Math<br/>
<input class="categories" type="checkbox" name="filter" value="Science" checked>Science<br/>
<input class="categories" type="checkbox" name="filter" value="Reading" checked>Reading
</div>
jQuery:
var checkedAttr = []; // array for checked attributes
// change event listener for whenever one or more of the following checkboxes have been checked/unchecked
$('#category-list :checkbox').change(function()
{
var value = $(this).val();
if($(this).is(':checked')) // checked
{
console.log(value + ' is now checked!!!!!!!!!!!!!!!!!!!!!!!!');
$('#category-list :checkbox').each(function(i, item){ // loop thru the input checkboxes
if(!(value === $(item).val())) // check if the current value does NOT match that already stored in array
{
checkedAttr.push(value); // add value to array
console.log("checkedAttr:", checkedAttr);
}
else // if it does match...
{
checkedAttr.splice(i, 1);// remove it from array
console.log("checkedAttr:", checkedAttr);
}
});
// check which attributes are checked and store in 'checkedAttr' array
//$('input[name=filter]').each(function(i, item){
//});
}
else // unchecked
{
console.log(value + ' is now unchecked!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
}
});
【问题讨论】:
标签: javascript jquery arrays checkbox each