Найти все флажки отмечены в родительском div - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь получить состояние двух входных флажков внутри элемента div. Мне нужно установить переменную flag в 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] возвращает элемент ввода. Когда я проверяю первый флажок первым и второй следующий, этот цикл работает нормально, но когда я проверяю первый первый флажок, проверяемая переменная устанавливается в значение true, основываясь на значении второго флажка, которое выполняется наконец.

Ожидается: Мне нужно вернуть «флажок», чтобы быть правдой, только если установлены оба флажка.

Может ли кто-нибудь предложить мне это.

Ответы [ 4 ]

2 голосов
/ 27 июня 2019

Вы можете использовать Array#some() метод , чтобы проверить, есть ли непроверенный:

var checked = oNode.ParentNode.Nodes.some(check => !check.checked)
1 голос
/ 27 июня 2019

Вместо того, чтобы находить все отмеченные, вместо этого найдите непроверенные, поскольку это то, что вы ищете.

var checked = true;
for (var i = 0; i < oNode.ParentNode.Nodes.length; i++) {
    if (!oNode.ParentNode.Nodes[i].Checked) {
       checked = false;
       break;
    }
}
1 голос
/ 27 июня 2019

Кажется, что для второго узла оно переопределяет значение.Если вы знаете, что есть два флажка, вы можете прямо отметить это следующим образом.

if (oNode.ParentNode.Nodes[0].Checked && oNode.ParentNode.Nodes[1].Checked) {
    checked = true;
} else {
   checked = false;
}
0 голосов
/ 27 июня 2019

Вам нужно разорвать ваш цикл, если какой-либо из флажков не установлен

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

Вы можете просто каждый метод массива вместо цикла

let checkedAll = oNode.ParentNode.Nodes.every(element => element.checked )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...