我正在尝试获取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。
有人可以建议我吗?
答案 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 )