查找是否在父div中选中了所有复选框

时间:2019-06-27 06:51:42

标签: javascript html arrays checkbox

我正在尝试获取div元素中两个输入复选框的状态。仅当两个复选框都选中时,才需要将标志变量设置为true。如果未选中任何输入复选框,则应将其设置为false。

我使用下面的代码在for循环中尝试了

var oParNode = oNode.ParentNode;
if (null != oParNode) {

  for (var i = 0; i < oNode.ParentNode.Nodes.length; i++) {
    if (oNode.ParentNode.Nodes[i].Checked) {
      checked = true;
    }
    else {
      checked = false;
    }
  }
}

在此代码中,Nodes [i]返回输入元素。当我先检查第一个复选框,然后再检查下一个复选框时,此循环工作正常,但是当我先检查第二个复选框时,根据最后执行的第二个复选框值,将checked变量设置为true。

期望:仅当两个复选框都选中时,我才需要返回“ checked”为true。

有人可以建议我吗?

4 个答案:

答案 0 :(得分:2)

您可以使用Array#some() method来检查是否存在未选中的内容:

var checked = oNode.ParentNode.Nodes.some(check => !check.checked)

答案 1 :(得分:1)

似乎第二个节点正在覆盖该值。如果您知道有两个复选框,则可以像这样直接进行检查。

if (oNode.ParentNode.Nodes[0].Checked && oNode.ParentNode.Nodes[1].Checked) {
    checked = true;
} else {
   checked = false;
}

答案 2 :(得分:1)

而不是查找所有已选中的内容,而是查找未选中的,因为这是您要查找的内容。

var checked = true;
for (var i = 0; i < oNode.ParentNode.Nodes.length; i++) {
    if (!oNode.ParentNode.Nodes[i].Checked) {
       checked = false;
       break;
    }
}

答案 3 :(得分:0)

如果没有选中任何复选框,则需要中断循环

 var oParNode = oNode.ParentNode;
 if (null != oParNode) {
 for (var i = 0; i < oNode.ParentNode.Nodes.length; i++) {
   if (oNode.ParentNode.Nodes[i].Checked) {
     checked = true;
   }  else {
      checked = false;
      break;
   }
 }
}

您可以简单地every数组方法而不是循环

let checkedAll = oNode.ParentNode.Nodes.every(element => element.checked )