Javascript(原版)element.checked = true/false 不起作用

Javascript (Vanilla) element.checked = true/false does not work

我的HTML代码:

<ul class="nav md-pills pills-default flex-column" role="tablist">
    <li class="nav-item">
        <input type="radio" name="q01" value="1" hidden checked>
        <a class="nav-link choice01 active" data-toggle="tab" href="#answer1-1" role="tab">1</a>
    </li>
    <li class="nav-item">
        <input type="radio" name="q01" value="2" hidden>
        <a class="nav-link choice01" data-toggle="tab" href="#answer1-2" role="tab">2</a>
    </li>
    <li class="nav-item">
        <input type="radio" name="q01" value="3" hidden>
        <a class="nav-link choice01" data-toggle="tab" href="#answer1-3" role="tab">3</a>
    </li>
    <li class="nav-item">
        <input type="radio" name="q01" value="4" hidden>
        <a class="nav-link choice01" data-toggle="tab" href="#answer1-4" role="tab">4</a>
    </li>
</ul>

我的 JS 代码:

const choices01 = document.getElementsByClassName("choice01");
const inputs01 = document.querySelectorAll("input[name=q01]");

for (let k=0; k<choices01.length; k++) {
    choices01[k].addEventListener("click", function(){
        inputs01[k].checked = true;
    });
}

我有几个问题,每个问题都有一个 "a" 元素和 "choice[numberOfTheQuestion]" class。 对于它们中的每一个,我都有一个隐藏的无线电输入,我想在单击元素 "a".

时检查它

但是,当我在 for 中执行 console.log(inputs01[k]) 然后单击 4 个选项之一时,这个选项显示时没有选中,就好像我没有单击一样。

注意:inputs01[k] 发回我点击的正确元素...

设置 checked 属性 似乎不起作用,但 setAttribute 可以。单击下方会导致 checked 属性 从 false 变为 true,如您在日志中所见:

const choices01 = document.getElementsByClassName("choice01");
const inputs01 = document.querySelectorAll("input[name=q01]");

for (let k = 0; k < choices01.length; k++) {
  choices01[k].addEventListener("click", function() {
    console.log(inputs01[k].checked);
    inputs01[k].setAttribute('checked', true);
    console.log(inputs01[k].checked);
  });
}
<ul class="nav md-pills pills-default flex-column" role="tablist">
  <li class="nav-item">
    <input type="radio" name="q01" value="1" checked hidden>
    <a class="nav-link choice01 active" data-toggle="tab" href="#answer1-1" role="tab">1</a>
  </li>
  <li class="nav-item">
    <input type="radio" name="q01" value="2" hidden>
    <a class="nav-link choice01" data-toggle="tab" href="#answer1-2" role="tab">2</a>
  </li>
  <li class="nav-item">
    <input type="radio" name="q01" value="3" hidden>
    <a class="nav-link choice01" data-toggle="tab" href="#answer1-3" role="tab">3</a>
  </li>
  <li class="nav-item">
    <input type="radio" name="q01" value="4" hidden>
    <a class="nav-link choice01" data-toggle="tab" href="#answer1-4" role="tab">4</a>
  </li>
</ul>

不清楚你想从你的问题中得到什么。您已经为输入设置了隐藏 属性,因此它不会显示,但是当您单击 a 标签时它确实发生了变化。

如果要在单击特定标签时显示单选按钮为选中状态,则需要将该特定输入的隐藏 属性 设置为 false。 https://jsfiddle.net/y718p9k3/3/

const choices01 = document.getElementsByClassName("choice01");
const inputs01 = document.querySelectorAll("input[name=q01]");

for (let k=0; k<choices01.length; k++) {
    choices01[k].addEventListener("click", function(){
        inputs01[k].checked = true;
        for (let j=0;j<inputs01.length;j++) {
            inputs01[j].hidden = true;
        }
        inputs01[k].hidden = false;
    });
}

element.checked = true; 有效,只是不修改 html.

为了验证一个元素是否被正确检查,你不应该做 console.log(element)(这只会 return 没有被检查的元素)而是做一个 console.log(element.checked) 并查看控制台,如果我们有 true(选中)或 false(未选中)。