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

If语句在控制台运行正常但页面失效(关联select值的分数计数器问题)

问题根因

  • 胜负判断逻辑仅在页面加载时执行一次,后续用户修改分数、调整获胜目标分时都不会重新触发判断,自然看不到效果。页面刚加载时两个分数均为0,默认获胜分是3,判断条件不满足,这段逻辑直接被跳过。你在控制台手动运行代码时已经是分数达标的状态,所以能命中逻辑。
  • HTML中的加减分按钮未配置对应id,JS代码中scoreOneUp/scoreOneDown/scoreTwoUp/scoreTwoDown四个变量实际为null,哪怕逻辑触发了也无法操作对应按钮。
  • 第二个判断分支中变量名拼写错误:scoresTwo/scoresOne不存在,执行时会抛出引用错误,阻断逻辑运行。

修复方案

第一步:补全HTML按钮id

<div class='player'>
<button id='scoreOneUp' class='up'>+</button>
<button id='scoreOneDown' class='down'>-</button>
<span id='scoreOne'>0</span>
</div>

<div class='player'>
    <button id='scoreTwoUp' class='up'>+</button>
    <button id='scoreTwoDown' class='down'>-</button>
    <span id='scoreTwo'>0</span>
</div>

第二步:封装胜负判断函数,在合适的时机调用

把原本的胜负判断逻辑封装为独立函数,每次修改分数、调整获胜目标分后都调用一次即可:

const scoreOne = document.querySelector('#scoreOne');
const scoreTwo = document.querySelector('#scoreTwo');
const scoreOneUp = document.querySelector('#scoreOneUp');
const scoreOneDown = document.querySelector('#scoreOneDown');
const scoreTwoUp = document.querySelector('#scoreTwoUp');
const scoreTwoDown = document.querySelector('#scoreTwoDown');
const reset = document.querySelector('#reset');
const points = document.querySelector('#points');
let winningScore = 3;

// 封装独立的胜负判断函数
function checkWin() {
  const s1 = parseInt(scoreOne.innerText);
  const s2 = parseInt(scoreTwo.innerText);
  if (winningScore === s1) {
    scoreOne.style.color = 'green';
    scoreTwo.style.color = 'red';
    scoreOneUp.disabled = true;
    scoreTwoUp.disabled = true;
    scoreOneDown.disabled = true;
    scoreTwoDown.disabled = true;
  } else if (winningScore === s2) {
    // 修正拼写错误的变量名
    scoreTwo.style.color = 'green';
    scoreOne.style.color = 'red';
    scoreOneUp.disabled = true;
    scoreTwoUp.disabled = true;
    scoreOneDown.disabled = true;
    scoreTwoDown.disabled = true;
  }
}
    
points.addEventListener('change', function() {
  winningScore = parseInt(this.value);
  // 调整获胜分后也需要判断是否已经满足获胜条件
  checkWin();
});

scoreOneUp.addEventListener('click', function() {
  scoreOne.innerText = parseInt(scoreOne.innerText) + 1;
  // 修改分数后调用判断
  checkWin();
});

scoreOneDown.addEventListener('click', function() {
  if (parseInt(scoreOne.innerText) > 0) {
    scoreOne.innerText = parseInt(scoreOne.innerText) - 1;
    // 修改分数后调用判断
    checkWin();
  }
});

scoreTwoUp.addEventListener('click', function() {
  scoreTwo.innerText = parseInt(scoreTwo.innerText) + 1;
  // 修改分数后调用判断
  checkWin();
});

scoreTwoDown.addEventListener('click', function() {
  if (parseInt(scoreTwo.innerText) > 0) {
    scoreTwo.innerText = parseInt(scoreTwo.innerText) - 1;
    // 修改分数后调用判断
    checkWin();
  }
});

reset.addEventListener('click', function() {
  scoreOne.innerText = 0;
  scoreTwo.innerText = 0;
  // 重置时还原分数颜色
  scoreOne.style.color = 'initial';
  scoreTwo.style.color = 'initial';
  scoreOneUp.disabled = false;
  scoreOneDown.disabled = false;
  scoreTwoUp.disabled = false;
  scoreTwoDown.disabled = false;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 06:15:04