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

制作训练营测验游戏: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:50:26