You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用索引无法获取数组值?JavaScript简易测验项目问题求助

解决单选按钮测验题的判断逻辑问题

听起来你遇到了单选按钮答题判断的小坑,我之前做测验项目的时候也踩过类似的雷,咱们一步步来梳理问题所在:

最可能的核心问题:判断逻辑的对比对象不匹配

你现在写的if(radio1.checked === answers[0])里,radio1.checked是一个布尔值(true/false),而你的answers数组里大概率存的是选项的文本、value值这类字符串/数字,布尔值和非布尔值用严格相等===对比肯定会返回false,自然就走到else分支了。

举个例子:如果answers[0]是"正确选项",那true === "正确选项"显然不成立,判断逻辑直接失效。

正确的实现思路和代码示例

咱们调整一下判断逻辑,核心是获取选中单选按钮的value值,再和答案数组里的对应值对比:

第一步:给单选按钮设置统一的name和对应的value

HTML结构要保证同一道题的单选按钮name属性相同(这样才能成为互斥的一组),同时给每个选项设置明确的value:

<!-- 第一道题示例 -->
<div class="question">
  <p>问题1:以下哪个是JavaScript的基本数据类型?</p>
  <input type="radio" name="q1" id="q1_opt1" value="object"> 对象<br>
  <input type="radio" name="q1" id="q1_opt2" value="string"> 字符串(正确)<br>
  <input type="radio" name="q1" id="q1_opt3" value="function"> 函数<br>
</div>
<button onclick="checkFirstQuestion()">检查第一题答案</button>

第二步:调整JavaScript的判断逻辑

不要直接用单个单选按钮的checked属性,而是先获取当前题目组中被选中的选项,再拿它的value和答案数组对比:

// 存储每道题的正确选项value
const answers = ["string", "array", "let", "console.log", "JSON"];

function checkFirstQuestion() {
  // 获取第一道题中被选中的单选按钮
  const selectedQ1 = document.querySelector('input[name="q1"]:checked');
  
  // 先判断用户有没有选择选项
  if (!selectedQ1) {
    alert("请先选择一个选项哦!");
    return;
  }
  
  // 对比选中选项的value和答案数组的对应项
  if (selectedQ1.value === answers[0]) {
    alert("回答正确!太棒了😎");
  } else {
    alert("回答错误,再仔细想想吧!");
  }
}

其他可能的排查点

  • 检查radio1是否正确获取到了DOM元素:可以在代码里加console.log(radio1),如果输出null,说明你的ID写错了,或者JS代码在DOM加载完成前就执行了(可以把JS放在</body>标签前,或者用DOMContentLoaded事件包裹)。
  • 检查类型匹配:如果answers数组里存的是数字(比如answers[0] = 2),而单选按钮的value是字符串(比如value="2"),严格相等===会不匹配,这时候可以改成宽松相等==,或者把数组里的内容统一成字符串。

内容的提问来源于stack exchange,提问作者Ajea Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:55:16