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

双单选表单计分异常:仅统计第二表单选项分数问题排查

问题分析与解决方案

核心错误原因

你代码里的赋值运算符写反了:所有=+必须改成+=。=+的作用是将右侧值转为正数后直接赋值给变量(比如TacoSUM =+ 2等价于TacoSUM = 2),而非累加。这会导致如果用户同时选中第一个和第二个表单的选项,后面的赋值会覆盖前面的结果,最终只有第二个表单的选项分数生效,第一个表单的分数被完全覆盖消失。

修复后的代码

HTML 修复(修正语法错误)

<form>
  <legend class="question 1"></legend>
  <div class="form-control">
    <label for="option-1">
      <input type="radio" id="option-1" value="A1">Fully agree
    </label>
    <label for="option-2">
      <input type="radio" id="option-2" value="A2">Somewhat agree
    </label>
    <label for="option-3">
      <input type="radio" id="option-3" value="A3">No opinion
    </label>
    <label for="option-4">
      <input type="radio" id="option-4" value="A4">Somewhat against
    </label>
    <label for="option-5">
      <input type="radio" id="option-5" value="A5">Fully against
    </label>
  </div>
</form>

<form>
  <legend class="question 2"></legend>
  <div class="form-control">
    <label for="option-6">
      <input type="radio" id="option-6" value="A6">Fully agree
    </label>
    <label for="option-7">
      <input type="radio" id="option-7" value="A7">Somewhat agree
    </label>
    <label for="option-8">
      <input type="radio" id="option-8" value="A8">No opinion
    </label>
    <label for="option-9">
      <input type="radio" id="option-9" value="A9">Somewhat against
    </label>
    <label for="option-10">
      <input type="radio" id="option-10" value="A10">Fully against
    </label>
  </div>
</form>

<button onclick="food()">DONE</button>

JavaScript 修复(修正运算符+逻辑优化)

let TacoSUM = 0;
let PizzaSUM = 0;
let HamburgerSUM = 0;

function food() {
  // 重置分数,避免多次点击按钮重复累加
  TacoSUM = 0;
  PizzaSUM = 0;
  HamburgerSUM = 0;

  // 第一个表单选项判断
  if (document.getElementById("option-1").checked) {
    TacoSUM += 2;
    PizzaSUM += 1;
    HamburgerSUM += 0;
  }
  if (document.getElementById("option-2").checked) {
    TacoSUM += 2;
    PizzaSUM += 1;
    HamburgerSUM += 2;
  }
  if (document.getElementById("option-3").checked) {
    TacoSUM += 1;
    PizzaSUM += 0;
    HamburgerSUM += 2;
  }
  if (document.getElementById("option-4").checked) {
    TacoSUM += 0;
    PizzaSUM += 0;
    HamburgerSUM += 0;
  }
  if (document.getElementById("option-5").checked) {
    TacoSUM += 1;
    PizzaSUM += 2;
    HamburgerSUM += 0;
  }

  // 第二个表单选项判断
  if (document.getElementById("option-6").checked) {
    TacoSUM += 0;
    PizzaSUM += 2;
    HamburgerSUM += 0;
  }
  if (document.getElementById("option-7").checked) {
    TacoSUM += 2;
    PizzaSUM += 0;
    HamburgerSUM += 2;
  }
  if (document.getElementById("option-8").checked) {
    TacoSUM += 0;
    PizzaSUM += 0;
    HamburgerSUM += 1;
  }
  if (document.getElementById("option-9").checked) {
    TacoSUM += 0;
    PizzaSUM += 2;
    HamburgerSUM += 0;
  }
  if (document.getElementById("option-10").checked) {
    TacoSUM += 1;
    PizzaSUM += 0;
    HamburgerSUM += 0;
  }

  alert(`Taco=${TacoSUM / 4 * 100}% Pizza=${PizzaSUM / 4 * 100}% Hamburger=${HamburgerSUM / 4 * 100}%`);
}

额外优化建议

用对象映射简化重复的判断逻辑,后续新增选项只需修改映射表:

let scores = {
  Taco: 0,
  Pizza: 0,
  Hamburger: 0
};

// 定义每个选项对应的分数映射
const optionScores = {
  "option-1": { Taco: 2, Pizza: 1, Hamburger: 0 },
  "option-2": { Taco: 2, Pizza: 1, Hamburger: 2 },
  "option-3": { Taco: 1, Pizza: 0, Hamburger: 2 },
  "option-4": { Taco: 0, Pizza: 0, Hamburger: 0 },
  "option-5": { Taco: 1, Pizza: 2, Hamburger: 0 },
  "option-6": { Taco: 0, Pizza: 2, Hamburger: 0 },
  "option-7": { Taco: 2, Pizza: 0, Hamburger: 2 },
  "option-8": { Taco: 0, Pizza: 0, Hamburger: 1 },
  "option-9": { Taco: 0, Pizza: 2, Hamburger: 0 },
  "option-10": { Taco: 1, Pizza: 0, Hamburger: 0 }
};

function food() {
  // 重置分数
  Object.keys(scores).forEach(key => scores[key] = 0);

  // 遍历选项并累加分数
  Object.entries(optionScores).forEach(([optionId, score]) => {
    if (document.getElementById(optionId).checked) {
      scores.Taco += score.Taco;
      scores.Pizza += score.Pizza;
      scores.Hamburger += score.Hamburger;
    }
  });

  alert(`Taco=${scores.Taco / 4 * 100}% Pizza=${scores.Pizza / 4 * 100}% Hamburger=${scores.Hamburger / 4 * 100}%`);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:35:28