нужно для цикла с условным продолжением - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно «продолжить» на основе флажка.

HTML:

<input type = "text" id = "E1" /><input type="checkbox" id="C1">
<input type = "text" id = "E2" /><input type="checkbox" id="C2">
<input type = "text" id = "E3" /><input type="checkbox" id="C3">
<input type = "text" id = "E4" /><input type="checkbox" id="C4">

JS:

for (var i=1; i<=4; i++) { 
if ("$C" +i.checked == true) {continue;} 
...;  
}

</script>

Ответы [ 5 ]

0 голосов
/ 27 апреля 2018

Что вам нужно сделать, это разбить вашу логику так, чтобы ваша программа была читабельной, и вы могли выразить ее в терминах более высокого уровня

function getCheckboxes() {
  const checkboxes = [];
  for (let i = 1; i <5; ++i) {
    checkboxes.push(document.getElementById(`E${i}`);
  }
  return checkboxes;
}

getCheckboxes()
  .filter(checkbox => !checkbox.checked)
  .forEach(checkbox => {
    // do something with an unchecked checkbook
  });
0 голосов
/ 27 апреля 2018

Попробуйте это.

document.getElementById("test").addEventListener("click", function(){
for (var i=1; i<=4; i++) { 
if($("#C"+i).is(':checked'))
continue;
console.log($("#E"+i).val())

}

})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type = "text" id = "E1" /><input type="checkbox" id="C1">
<input type = "text" id = "E2" /><input type="checkbox" id="C2">
<input type = "text" id = "E3" /><input type="checkbox" id="C3">
<input type = "text" id = "E4" /><input type="checkbox" id="C4">

<button id="test" >Test</button>

В этом случае не будут записываться значения для тех входов, у которых не установлен флажок рядом, например

0 голосов
/ 27 апреля 2018

$("#C" + i).prop('checked') дает вам true, если установлен флажок i-й.

Примечание:

  • Способ зацикливания не очень хорош, так как вам всегда нужно корректировать свои условия, если вы добавляете / удаляете входы.
  • Кроме того, ваше условие цикла было выключено, когда вы начинаете с 1

for (var i = 1; i < 5; i++) { 
  if ($("#C" + i).prop('checked'))
    continue;

  console.log(i + ' unchecked');
  // do some stuff
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type = "text" id = "E1" /><input type="checkbox" id="C1" checked>
<input type = "text" id = "E2" /><input type="checkbox" id="C2">
<input type = "text" id = "E3" /><input type="checkbox" id="C3">
<input type = "text" id = "E4" /><input type="checkbox" id="C4">
0 голосов
/ 27 апреля 2018

continue - правильное ключевое слово, используемое для достижения этой цели. Я подозреваю, что проблема в вашем случае заключается в том, что утверждение if никогда не соответствует действительности.

Я думаю, вы хотите это:

// Add 1 to index first and then concatenate with "#C" to create jQuery id selector
if ($('#C' + (i + 1)).is(':checked')) { continue; }

Ваше if утверждение выше функционально эквивалентно (если отмечено):

if ("$Ctrue" == true) { continue; }

$ C и строковое значение логического значения объединяются.

0 голосов
/ 27 апреля 2018

Ваш цикл никогда не запускается, потому что в вашем коде нет прослушивателей событий. Вы должны иметь прослушиватель событий, связанный с вашими флажками ввода. Это будет выглядеть так:

var checkbox = document.querySelector("input[name=checkbox]");

checkbox.addEventListener( 'change', function() {
  if(this.checked) {
    // output button here
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...