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

为何我的JavaScript else if语句无法正常工作?技术求助

问题分析与修复方案

嘿,我来帮你捋捋你代码里的问题!你的else if逻辑确实踩了几个坑,还有一些小细节没处理到位,咱们一步步来修复:


核心问题梳理

1. 判断逻辑完全跑偏

你现在的evaluateAnswer函数里,是拿字符串'box1'和数字类型的correctAnswer做比较(比如if ('box1' === correctAnswer)),这俩类型都不一样,肯定永远不相等啊!而且你的else if结构逻辑也错了:第一个else if是'box1' !== correctAnswer,这会直接覆盖所有后续判断——只要第一个条件不满足,就会进入这个分支,后面的box2/box3/box4判断根本不会执行,直接显示wrong。

更关键的是:你的函数根本不知道用户点击的是哪个盒子,现在不管点哪个选项,执行的判断逻辑都一模一样,完全没法对应到用户选的答案。

2. 拼写错误导致样式失效

你写的style.diplay是错的!正确的属性名是style.display(少了个s),这个拼写错误会直接导致你没法显示/隐藏correct和wrong的提示框。

3. 提示框没有自动隐藏逻辑

现在你显示了correct或wrong后,没有在生成新题/下次点击时隐藏它们,导致提示框会一直停留在页面上,影响后续交互。


修复后的完整代码与解释

第一步:修改HTML的点击事件

把点击的盒子元素传给evaluateAnswer函数,这样函数就能知道用户选的是哪个选项:

<div id="correct"> Correct! </div>
<div id="wrong"> Try Again </div>
<div id="question"> <span id="firstInt"></span><span id="secondInt"></span> </div>
<div id="instruction"> Click on the Correct Answer </div>
<div id="choices">
  <div id="box1" onclick="evaluateAnswer(this)" class="boxes"></div>
  <div id="box2" onclick="evaluateAnswer(this)" class="boxes"></div>
  <div id="box3" onclick="evaluateAnswer(this)" class="boxes"></div>
  <div id="box4" onclick="evaluateAnswer(this)" class="boxes"></div>
</div>
<div id="startreset"> Start Game </div>

第二步:重写evaluateAnswer函数

现在函数能接收用户点击的盒子,判断答案是否正确,并处理提示和加分逻辑:

function evaluateAnswer(selectedBox) {
  // 先隐藏之前的提示框,避免叠加显示
  const correctBox = document.getElementById("correct");
  const wrongBox = document.getElementById("wrong");
  correctBox.style.display = 'none';
  wrongBox.style.display = 'none';

  // 获取用户选择的答案,转成数字类型(因为innerHTML是字符串)
  const selectedAnswer = parseInt(selectedBox.innerHTML);

  if (selectedAnswer === correctAnswer) {
    // 答对了:加分、显示提示、延迟生成新题(让用户看到提示)
    score++;
    document.getElementById("scorevalue").innerHTML = score;
    correctBox.style.display = 'block';
    setTimeout(generateQA, 1000);
  } else {
    // 答错了:仅显示提示
    wrongBox.style.display = 'block';
  }
}

第三步:完善generateQA和stopGame函数

  • 在生成新题时,先隐藏提示框,避免切换题目时提示残留:
function generateQA(){
  // 先隐藏提示框
  document.getElementById("correct").style.display = 'none';
  document.getElementById("wrong").style.display = 'none';

  // 原有的题目生成逻辑不变
  const Na = 1 + Math.round(Math.random() * 9);
  const Nb = 1 + Math.round(Math.random() * 9);
  correctAnswer = Na * Nb;
  const w1 = 1 + Math.round(Math.random() * 16);
  const w3 = 1 + Math.round(Math.random() * 22);
  const w4 = 1 + Math.round(Math.random() * 92);
  document.getElementById("question").innerHTML = Na + "x" + Nb;
  console.log(correctAnswer);
  const myArray = [w1, correctAnswer, w3, w4];
  const result = myArray.shuffle();
  document.getElementById("box1").innerHTML = result[0];
  document.getElementById("box2").innerHTML = result[1];
  document.getElementById("box3").innerHTML = result[2];
  document.getElementById("box4").innerHTML = result[3];
}
  • 在游戏结束时,隐藏提示框,避免和game-over弹窗重叠:
function stopGame() {
  gameOn = false;
  if (interval) {
    clearInterval(interval);
    interval = null;
  }
  document.getElementById("startreset").innerHTML = "Start Game";
  document.getElementById("time-remaining").style.display = "";
  // 隐藏提示框
  document.getElementById("correct").style.display = 'none';
  document.getElementById("wrong").style.display = 'none';
}

第四步:优化变量声明

把correctAnswer声明为全局变量(避免隐式全局),在代码顶部加上:

let correctAnswer; // 代替原来未声明的correctAnswer

这样修改后,你的逻辑就能正常工作了:点击选项时会判断答案对错,显示对应的提示,答对后自动加分并生成新题,答错仅显示重试提示,游戏结束时也能正确清理页面状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:10