制作训练营测验游戏:JavaScript随机出题函数故障排查请求
测验游戏代码问题分析与修复
代码里的核心问题:
- Math对象大小写错误:JavaScript内置数学对象是大写的
Math,你写成了小写math,这会直接导致math.floor和math.random抛出引用错误。 - getElementById参数错误:
document.getElementById需要传入字符串类型的元素ID,如果你要找的元素ID是testStart,必须写成document.getElementById('testStart'),否则会把testStart当成变量解析,未定义的话会返回null。 - 事件监听方法拼写错误:
addEventListener被写成了addEventListner(少了一个字母e),导致点击事件根本绑定不上。 - 逻辑顺序混乱:你先绑定事件再判断元素是否存在,若元素不存在会直接报错;而且每次调用
askQuestions都会重复绑定点击事件,多次点击后函数会重复执行。 - 未实际获取问题:你生成了随机索引,但只是输出了索引值,完全没用到
testQuestions数组里的问题内容。 - document.write使用不当:页面加载完成后用
document.write会覆盖整个文档,这不是展示问题的合理方式。
修正后的代码示例:
// 假设你已定义的问题数组: // const testQuestions = ['问题1:xxx?', '问题2:xxx?', '问题3:xxx?']; function initQuiz() { // 获取开始按钮元素 const startBtn = document.getElementById('testStart'); // 获取用于展示问题的元素(需提前在HTML中定义,比如<div id="questionDisplay"></div>) const questionDisplay = document.getElementById('questionDisplay'); if (!startBtn || !questionDisplay) return; // 绑定点击事件,用once确保按钮只触发一次 startBtn.addEventListener('click', function() { // 生成合法的随机索引 const randomIndex = Math.floor(Math.random() * testQuestions.length); // 从数组中取出对应问题并展示 questionDisplay.textContent = testQuestions[randomIndex]; }, { once: true }); } // 页面加载完成后再初始化,避免获取不到DOM元素 document.addEventListener('DOMContentLoaded', initQuiz);
内容的提问来源于stack exchange,提问作者Christopher Dirksen
相关产品推荐
相关产品推荐

