Есть ли способ отключить флажки с разными именами и идентификаторами, если установлен переключатель? - PullRequest
0 голосов
/ 30 мая 2020

Я нашел решение, но атрибут name должен быть таким же, иначе он не сработает. Я как-то думал об автоматическом увеличении атрибута id, но пока мне не повезло. Вот что у меня есть (это работает):

function ckChange(ckType) {
  var ckName = document.getElementsByName(ckType.name);

  for (var i = 0; i < ckName.length; i++) {
    if (!ckName[i].checked) {
      ckName[i].disabled = true;
    } else {
      if (ckName[i].checked) {
        ckName[i].disabled = false;
      }
    }
  }
}
<form>
 <input type="radio" name="No Past Conditions" id="rb0" onclick="ckChange(this)" />
   <label for="rb0">No Past Conditions </label>
          
 <input type="checkbox" name="No Past Conditions" id="cb1" value="Yes" onclick="ckChange(this)" />
   <label for="cb1">Heart disease </label>

<!-- WORKS GREAT IF NAME IS THE SAME, HOWEVER I WANT TO CHANGE IT IN ORDER FOR READABILITY WHEN I COLLECT THE FORM -->

<!-- this part here doesn't work, bcz the name attrib is different -->
  <input type="checkbox" name="Anemia or other blood disease" id="cb2" value="Yes" />
          <label for="cb2">Anemia or other blood disease</label>
  <input type="checkbox" name="Severe headaches" id="cb3" value="Yes" />
          <label for="cb3">Severe headaches</label>
</form>

Теперь я попытался объявить автоматически увеличиваемую переменную флажка, используя имя базового идентификатора (cb: checkbox) + j (объединяя его, я думаю?), Но это не правильный синтаксис я думаю. Код:

var j;
var checkbox = document.getElementById(cb + j);
for (var j = 0; j < 20; j++)

Ясно, что я знаю, что это неправильно, но я искал несколько часов и очень расстроен. Вы можете мне помочь?

Edit:@shingo.nakanishi ответ вызывает эту ошибку @shingo.nakanishi answer generates this error

1 Ответ

0 голосов
/ 30 мая 2020

Вам нужно ввести getElementById вместо l oop. Вам не нужно объявлять var j дважды.

for (var j = 0; j < 20; j++) {
  var checkbox = document.getElementById(cb + j);
  ...
}

Если у вас нет переменной cb, пусть cb будет строковым литералом, как показано ниже.

for (var j = 0; j < 20; j++) {
  var checkbox = document.getElementById("cb" + j);
  ...
}

Примечание

Использование id - плохая практика, как прокомментировал @Chris G.

Если вам нужен хороший дизайн, вам нужно сделать полную версию кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...