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

点击主题切换按钮后游戏目标词数组未更新的技术求助

问题:FOODle猜词游戏主题切换后词汇数组和目标词未更新

点击主题选择按钮后,targetWords数组和targetWord目标词未按预期更新,核心问题出在变量声明、函数逻辑和事件绑定上,以下是具体问题及修复方案:

核心问题分析

  • targetWord无法更新:使用const声明,初始化后无法重新赋值,需改为let。
  • 返回值未绑定到变量:调用runGame(gameTheme)时,仅执行函数但未将返回的随机词赋值给targetWord。
  • 缺少默认主题处理:无主题参数时targetWords为空数组,会导致随机取词失败。
  • 事件绑定范围错误:getElementsByTagName('button')会选中页面所有按钮(包括顶部问号按钮),需限定为主题区域内的按钮。
  • 函数语法错误:runGame函数未闭合(缺少}),导致后续startGame函数定义无效。

修复后的JavaScript代码

/**
 * 存储当前主题的词汇数组
 */ 
let targetWords = []

/**
 * 当前游戏的目标词,随主题切换更新
 */
let targetWord = ''

/**
 * 页面加载完成后绑定主题按钮事件
 */
document.addEventListener('DOMContentLoaded', function () {
    // 仅绑定主题区域内的按钮
    let themeButtons = document.querySelectorAll('.theme-area .btn');

    for (let button of themeButtons) {
        button.addEventListener('click', function () {
            let gameTheme = this.getAttribute('data-type');
            // 调用runGame并将返回值赋值给targetWord
            targetWord = runGame(gameTheme);
        })
    }
    // 初始化默认主题(比如设为fruit)
    targetWord = runGame('fruit');
})


/**
 * 根据主题切换词汇数组,并返回随机目标词
 */
function runGame(gameTheme) {
    // 水果主题词汇
    if (gameTheme === "fruit") {
        targetWords = ["acorn", "carob", "dates", "gourd", "grape", "lemon", "limes", "mango", "melon", "olive", "peach", "pears", "plums", "prune", "salak"];
    }
    // 蔬菜主题词汇
    else if (gameTheme === "vegetable") {
        targetWords = ["azuki", "basil", "beans", "caper", "chard", "dulse", "enoki", "grain", "groat", "maize", "morel", "pinto", "ramps", "thyme", "wheat"];
    }
    // 默认主题(防止无参数时出错)
    else {
        targetWords = ["acorn", "carob", "dates", "gourd", "grape", "lemon", "limes", "mango", "melon", "olive", "peach", "pears", "plums", "prune", "salak"];
    }
    console.log('当前词汇数组:', targetWords);

    // 从数组中随机选一个词(用数组长度代替固定15,更灵活)
    const chosenWord = targetWords[Math.floor(Math.random() * targetWords.length)];
    console.log('当前目标词:', chosenWord);
    return chosenWord;
}

/**
 * 初始化游戏交互事件
 */
function startGame() {
    document.addEventListener("click", handleMouseClick);
    document.addEventListener("keydown", handleKeyPress);
}

// 调用startGame初始化交互
startGame();

修复说明

  1. 将targetWord改为let声明,允许后续重新赋值。
  2. 主题按钮点击时,将runGame的返回值赋值给targetWord,实现目标词更新。
  3. 给runGame添加默认主题分支,避免无参数时词汇数组为空。
  4. 使用querySelectorAll('.theme-area .btn')仅绑定主题区域的按钮,排除其他无关按钮。
  5. 修复runGame函数的闭合问题,确保startGame函数正常定义。
  6. 调用startGame()初始化交互事件(原代码中未执行此函数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:42:39