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

JavaScript开发选择题测验循环失效仅显示最后一题问题求助

问题1解答:为什么只显示最后一道题而非第一道

你的for循环会一次性遍历完整的题目数组,每一轮循环都会覆盖题目、选项对应的DOM节点内容,前3道题的渲染结果会被后续循环的赋值直接覆盖,等循环全部执行结束,页面留存的只有最后一轮循环赋值的最后一道题内容。

问题2解答:为什么循环逻辑没有正常生效

循环本身执行是正常的,是业务逻辑和触发逻辑不匹配:你需要的是「每次点击切换一道题」,但现有代码是「每次点击就遍历所有题目,直接渲染到最后一道」,自然不会出现逐题递增的效果。

修复代码

新增全局变量存储当前题目的索引,每次点击后索引自增再渲染对应题目即可,修改后代码如下:

const questionList = [
  {    
    question: "你叫什么名字?",    
    choices: ["比尔", "鲍勃", "史蒂夫", "乔"],    
    correctAnswer: "bill",
  },
  {    
    question: "她叫什么名字?",    
    choices: ["丹", "丹尼", "丹妮尔", "丹妮拉"],    
    correctAnswer: "daniela"
  },
  {    
    question: "妈妈叫什么名字?",    
    choices: ["多丽丝", "简", "罗丝", "弗兰克"],    
    correctAnswer: "rose"
  },
  {    
    question: "爸爸叫什么名字?",    
    choices: ["伊恩", "安格斯", "杰克", "约翰"],    
    correctAnswer: "ian"
  }
]
// 记录当前展示的题目索引,默认从0(第一道题)开始
let currentQuestionIndex = 0

function callQuestions() {
  // 题目全部展示完后重置回第一题,可根据需求调整为结束提示
  if (currentQuestionIndex >= questionList.length) {
    currentQuestionIndex = 0
    alert('测验已完成,将重新开始')
  }
  const cur = questionList[currentQuestionIndex]
  document.getElementById("quiz-questions").innerHTML = cur.question
  document.getElementById("answerA").innerHTML = cur.choices[0]
  document.getElementById("answerB").innerHTML = cur.choices[1]
  document.getElementById("answerC").innerHTML = cur.choices[2]
  document.getElementById("answerD").innerHTML = cur.choices[3]
  // 索引自增,下次点击加载下一题
  currentQuestionIndex++
}

document.getElementById("select-button").addEventListener("click", callQuestions)
// 页面加载默认渲染第一道题,不需要可以删除
callQuestions()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:57:04