当数组的所有项都为 true 时,javascript 每个函数都返回 false

标签 javascript jquery

我正在尝试使用每个函数检查 javascript 数组的所有项目是否均为 true:

// 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);
}

然后,如果所有项目均为 true,我会将标题复选框列选中。否则,我将其设置为未选中。 我遇到的问题如下: lstChecks 中的所有项目都是 true,但每个函数都返回 false。为什么?它应该返回 true。使用 Chrome 检查器,我看到下面的 lstChecks = [true, true, true, true] 值,但它返回 false。

最佳答案

您应该使用 .prop 而不是 .attr - .attr 只会为您提供复选框的状态标记。您还需要从 .every 回调返回,并简单地检查 .prop('checked') (不要使用 === )。在最后设置 chkbx 时,您还应该使用 .prop:

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()">

关于当数组的所有项都为 true 时,javascript 每个函数都返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60735323/

相关文章:

javascript - 在 Laravel Blade 模板的 JavaScript 中使用 HTML 存储 PHP 变量

jquery - 在已加载的 DOM 元素上动态更改/分配 ui 可调整大小的实例

php - 当我在 laravel 的 View 页面上调用 foreach 循环时,它不显示数据

javascript - 在 Dynamics 365 嵌入式 iframe Web 资源中使用加载微调器

php - jquery json post返回整个页面html

javascript - 如何将ckeditor内容保存到mysql数据库中

javascript - 包含其他 gulp 文件的 Gulpfile

javascript - Jquery数组循环中的多个Ajax请求

javascript - 可以使用数字作为 bool 值而不是将它们与零进行比较吗?

javascript - dimple js测量轴值