如果选中了单选按钮,是否可以禁用具有不同名称和ID的复选框?

问题描述 投票:0回答:1

我想出了解决方案,但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>

现在,我尝试使用基本ID名称(cb:复选框)+ j(我想将其串联起来)来声明一个复选框变量是自动递增的,但是我认为这不是正确的语法。代码:

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

很明显,我知道这是错误的,但是我已经搜索了几个小时,我真的很沮丧。你们可以帮我吗?

编辑:@ shingo.nakanishi答案会产生此错误@shingo.nakanishi answer generates this error

javascript html checkbox id
1个回答
0
投票

您需要将getElementById放入for循环中。您不需要两次声明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的做法是错误的做法。

如果您想要一个好的设计,则需要更多地研究整个内容。

© www.soinside.com 2019 - 2024. All rights reserved.