将“全选”复选框添加到更新对象数组的复选框列表中
Add a "Select All" checkbox to lists of checkboxes that update an array of objects
我有两个复选框列表(稍后还会有其他列表),例如:
<ul>
<li><input type="checkbox" onchange="handleChange()" name="job" rel="it-manager" value="IT-Manager" id="IT Manager" class="selectedId" checked> IT Manager</li>
<li><input type="checkbox" onchange="handleChange()" name="job" rel="consultant" value="Consultant" id="Consultant" class="selectedId" checked> Consultant</li>
</ul>
<ul>
<li><input type="checkbox" onchange="handleChange()" name="reg" rel="client" value="Client" id="Client" checked> Client</li>
<li><input type="checkbox" onchange="handleChange()" name="reg" rel="prospect" value="Prospect" id="Prospect" checked> Prospect</li>
<ul>
每当选中/取消选中复选框组合时,都会过滤对象数组。
问题 在顶部添加"全选"框的最佳方法是什么?我希望功能就像这个例子一样。我尝试实现该示例并且复选框功能运行良好,但我似乎无法正确更新过滤器。
我在filteredBy
中尝试过if else
陈述,但无济于事。我已经尝试了一个额外的窗口函数来处理"全选"按钮,但这把事情搞砸了。
我意识到这是一个有点模糊的问题,但我希望也许有人以前遇到过这个问题。我很感激任何可以指出我正确方向的建议。谢谢!
有关上下文的更多详细信息 每当选中/取消复选框组合onchange
输入标记时,都会运行handleChange()
函数,该函数过滤名为 sorted
的对象数组并将结果放入 var arrayToFilterUpon
中。它还在该变量上运行一个名为 makeFilteredArray
的函数。
window.handleChange = function() {
arrayToFilterUpon = sorted.filter(filterBy);
makeFilteredArray(arrayToFilterUpon);
}
makeFilteredArray
函数只是将其放入用于更新 d3 映射的新数组filteredArray
。
function makeFilteredArray(array) {
var filteredArray = [];
filteredArray.push(array);
目前,当属性值与选中匹配时,筛选器返回数组中的对象(使用"and"逻辑)。
function filterBy(e) {
return document.getElementById(e.jobRole).checked
&& document.getElementById(e.regType).checked;
}
每次更改复选框时,var filteredArray
都会更新。
离线获得一些帮助,我的特定情况的解决方案如下。意识到这是一个模糊而庞大的问题,对我有用的解决方案确实直接回答了它,并且与问题中的代码并不完全相关。考虑只删除这个问题,但暂时保留它,以防此答案对任何人都有用,作为在多个列表中设置"全选"按钮的起点。
setupSelectAll: function () {
$('.selectedId').change(function () {
var $input = $(this);
var $allInputs = $input
.closest('ul')
.find('.selectedId');
var $selectAll = $input.closest('ul').find('.selectAll');
var totalInputs = $allInputs.length;
var numberChecked = $allInputs.filter(":checked").length;
$selectAll.prop('checked', totalInputs === numberChecked);
});
},
setupChangeHandler: function () {
var app = this;
$('.job-role-filter .selectedId, .reg-type-filter .selectedId').change(
_.debounce(function (){
var $input = $(this);
app.updateMap();
app.updateChart();
}, 100)
);
$('.selectAll').change(function (){
var $selectAll = $(this);
$selectAll.closest('ul')
.find('.selectedId')
.prop('checked', $selectAll.prop('checked'))
.change();
});
},
getCheckedOptions: function () {
this._checkedOptions = {
jobRole: $('.job-role-filter input:checked').map(function () {
return $(this).attr('id');
}),
regType: $('.reg-type-filter input:checked').map(function () {
return $(this).attr('id');
}),
};
},
相关文章:
- 启用文本框选中复选框数组
- 如何将复选框数组中的数据保存到数据库中
- 将复选框数组传递到 $_GET 的另一种方法 - 除了方括号
- JavaScript 需要从复选框数组中选中一个复选框
- JavaScript 需要从复选框数组中选中一个复选框
- 验证至少一个子复选框,对应于复选框数组的选中元素
- 获取角度 JS 中的复选框数组值
- 从点击按钮事件原型或 jQuery 发布复选框数组
- Angularjs,ng-click,如何在MongoDB中放置复选框数组
- 输入复选框数组,如果未选中,jQuery不会发送任何值
- 过帐值形成一个复选框数组
- 计数选中的复选框(数组)数&保存选中的复选框
- JavaScript中的HTML控制数组- 1的复选框数组返回零长度
- 如何访问复选框数组的第一个元素而不使用每个元素
- 我不能从html复选框数组传递一些值到我的php页面
- 使用Javascript禁用或启用复选框数组
- 无法检查javascript复选框数组元素是否被选中
- 浏览器崩溃-复选框数组Ajax (PHP)
- 如何在提交前检查复选框数组的内容
- 读取动态复选框数组在php/html