javascript - 当数组的所有项目都为真时,javascript每个函数都返回假
问题描述
我正在尝试使用每个函数检查 javascript 数组的所有项目是否为真:
// Iterate over a column of checkboxes
function GetListOfChecks()
{
var lstChecks = [];
$('.chkbxq').each(function () {
lstChecks.push($(this).attr('checked') === 'checked' ? true : false);
});
return lstChecks;
}
// Update header checkbox (checked or unchecked)
function UpdateCheckBoxHdr()
{
var grid = $('#MyGrid').data('tGrid');
var lstChecks = GetListOfChecks();
var checked = lstChecks.every(function (v) { v === true; });
$('.chkbx').attr('checked', checked);
}
然后,如果所有项目都为真,我将选中标题复选框列。否则,我将其设置为未选中。我遇到的问题如下: lstChecks 中的所有项目都是真的,但每个函数都返回假。为什么?它应该返回 true 。使用 Chrome 检查器,我看到以下 lstChecks = [true, true, true, true] 的值,但它返回 false。
解决方案
您应该使用.prop
而不是.attr
-.attr
只会为您提供复选框标记的状态。您还需要从.every
回调中返回,并简单地检查.prop('checked')
(不要使用===
)。.prop
最后设置时还应该使用chkbx
:
function GetListOfChecks()
{
var lstChecks = [];
$('.chkbxq').each(function () {
lstChecks.push($(this).prop('checked'));
});
return lstChecks;
}
// Update header checkbox (checked or unchecked)
function UpdateCheckBoxHdr()
{
var grid = $('#MyGrid').data('tGrid');
var lstChecks = GetListOfChecks();
var checked = lstChecks.every(v => v);
$('.chkbx').prop('checked', checked);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" class="chkbx">
<input type="checkbox" class="chkbxq" onchange="UpdateCheckBoxHdr()">
<input type="checkbox" class="chkbxq" onchange="UpdateCheckBoxHdr()">
你也可以很容易地实现这种微不足道的事情,而不需要像 jQuery 这样的大库:
// Update header checkbox (checked or unchecked)
function UpdateCheckBoxHdr() {
if ([...document.querySelectorAll('.chkbxq')].every(checkbox => checkbox.checked)) {
document.querySelector('.chkbx').checked = true;
}
}
<input type="checkbox" class="chkbx">
<input type="checkbox" class="chkbxq" onchange="UpdateCheckBoxHdr()">
<input type="checkbox" class="chkbxq" onchange="UpdateCheckBoxHdr()">
推荐阅读
- gradle - 在 Grails 3.3.11 中无法使用 Spring Security 运行应用程序
- reactjs - React Apollo Client 上次升级问题
- vue.js - Bootstrap Popover 内容不响应 Vue2
- reactjs - 在 React 中循环嵌套对象
- sonarqube - 声纳测试覆盖率 - 排除模块
- powerbi - Power BI DAX:基于行上下文筛选器计算度量
- python - 当使用beautifulsoup进行网页抓取然后保存到csv时,我只收到一行信息而不是所有需要的行
- for-loop - Stata中的无效语法循环
- html - 使用 HTML 中的threatmetrix 和 Java 后端验证的设备身份
- windows - 为什么 AutoAdminLogon 不断重置为 0?