计时测验应用JS值无法渲染到HTML 答题对错样式不生效
核心故障原因
你遇到的两个问题都是代码逻辑不匹配导致的,不存在文件关联问题:
- 题目、分数不渲染:混用jQuery对象和原生DOM API。你用
$()拿到的是jQuery包装对象,不是原生DOM节点,直接调用原生的innerHTML/innerText/addEventListener/dataset属性/方法全部失效,DOM自然不会更新。 - 对错样式不触发:存在两处逻辑错误:
- 答案判断逻辑不匹配:你存储的正确答案
currentQuestion.answer是选项文本(比如all of the above),但判断时取的selectedAnswer是选项的data-number序号值(1/2/3/4),两者永远不可能相等,永远判定为答错。 - 类名不匹配:CSS里定义错误状态类是
.wrong,但JS逻辑里给错误选项加的类名是incorrect,类名对应不上,样式无法生效。
- 答案判断逻辑不匹配:你存储的正确答案
逐点修复方案
直接替换对应代码段即可:
- 替换开头的DOM获取代码,统一用原生DOM API(和你后续写的操作逻辑匹配,不用全量改写为jQuery写法)
// 注释掉原jQuery获取方式,换成原生DOM获取 // const question = $('#question'); // const choices = Array.from($('.choice-text')); // const scoreText = $('#score'); const question = document.getElementById('question'); const choices = Array.from(document.querySelectorAll('.choice-text')); const scoreText = document.getElementById('score');
- 修正选项点击逻辑里的答案判断、类名赋值部分
choices.forEach(choice => { choice.addEventListener('click', e => { if (!acceptingAnswers) return acceptingAnswers = false const selectedChoice = e.target // 原逻辑取选项序号,改为取选中项的文本和正确答案比对 const selectedAnswer = selectedChoice.innerText.trim() // 错误类名和CSS对齐为wrong,不要使用不存在的incorrect类 let classToApply = selectedAnswer === currentQuestion.answer.trim() ? 'correct' : 'wrong' if (classToApply === 'correct') { incrementScore(SCORE_POINTS) } selectedChoice.parentElement.classList.add(classToApply) setTimeout(() => { selectedChoice.parentElement.classList.remove(classToApply) getNewQuestion(); }, 1000) }) });
- (可选优化)修正题目边界判断逻辑,你当前设置
MAX_QUESTIONS = 10但示例里只放了2道题,原判断会在题目耗尽后直接跳end.html,补全剩余8道题后该逻辑可正常工作,不用额外修改。
修复后预期效果
- 页面加载后自动随机抽取题库题目,题干、四个选项文本正常渲染
- 选对选项时,选项容器显示绿色正确样式,分数加100,1秒后切换下一题
- 选错选项时,选项容器显示红色错误样式,1秒后切换下一题
- 所有题目答完后自动跳转至end.html,最终分数存入localStorage
内容的提问来源于stack exchange,提问作者dhuw
相关产品推荐
相关产品推荐

