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

JS+HTML下拉式计算器结果值被重置问题求助

修复方案

问题根源是点击等于号(submit类型按钮)时,表单会触发默认的提交行为,页面会重新加载(或跳转到eval.html),导致刚设置的结果被清空——虽然控制台能输出正确结果,但页面刷新后状态直接重置了。

下面是几种简单可行的修复方式:

方式1:阻止submit按钮的默认提交行为

直接修改等于号按钮的onclick事件,在执行计算后返回false,拦截表单提交:

<input type="submit" id="eq" name="Eq" value="=" onclick="Calculate(); return false;" />

或者在Calculate函数中通过事件对象阻止默认行为:

function Calculate(event) {
  var n1 = parseFloat(document.getElementById('n1').value);
  var n2 = parseFloat(document.getElementById('n2').value);
  var op = document.getElementById('op').value;
  if (isNaN(n1) || isNaN(n2)) return;
  
  eval('var r =' + n1 + op + n2);
  console.log(r);
  document.getElementById('res').value = r;
  
  // 阻止表单默认提交
  if (event) event.preventDefault();
}

对应按钮需传递事件参数:

<input type="submit" id="eq" name="Eq" value="=" onclick="Calculate(event)" />

方式2:将submit按钮改为普通button按钮

如果不需要表单提交功能,直接把按钮类型从submit改成button,点击时只会执行计算逻辑,不会触发表单提交:

<input type="button" id="eq" name="Eq" value="=" onclick="Calculate()" />

额外优化:替换eval函数(安全性提升)

eval存在安全风险且可读性差,建议用switch语句替代运算逻辑:

function Calculate() {
  var n1 = parseFloat(document.getElementById('n1').value);
  var n2 = parseFloat(document.getElementById('n2').value);
  var op = document.getElementById('op').value;
  if (isNaN(n1) || isNaN(n2)) return;
  
  let r;
  switch(op) {
    case '+': r = n1 + n2; break;
    case '-': r = n1 - n2; break;
    case '*': r = n1 * n2; break;
    case '/': 
      r = n2 !== 0 ? n1 / n2 : '错误(除以0)'; 
      break;
    default: r = '';
  }
  console.log(r);
  document.getElementById('res').value = r;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:35:09