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

JS厨房单位转换器函数提交后显示undefined问题求助

问题分析与修复方案

你的代码出现undefined弹窗主要有这几个核心问题:

1. 过早获取输入值,未同步用户实时输入

页面加载时你就获取了input-1和input-2的值,此时输入框是空的,且后续用户输入内容后,这两个变量不会自动更新为最新值。

2. 函数参数重名+调用传值无效

convertUnits函数里定义了同名的unit1、unit2参数,会直接覆盖外部全局变量;而且点击提交时传递的unit1、unit2是页面加载时的空值,并非用户输入后的最新内容。

3. 错误访问非DOM对象的value属性

conversion是unit1 + unit2的计算结果(字符串拼接或数字相加),它本身不是DOM元素,没有value属性,所以conversion.value必然返回undefined。

4. 表单默认提交导致页面刷新

点击submit按钮会触发表单默认提交行为,页面会直接刷新,弹窗刚出现就会被刷新掉。


修正后的代码

HTML部分(移除无效action,绑定表单提交事件)

<body>
  <h1>Kitchen Calculator</h1>
  
  <form id="conversionForm">
    <input type="text" id="input-1" name="First Amount">
    
    <div class="dropdown">
      <button class="dropbtn">Units</button>
      <div class="dropdown-content">
        <button>Teaspoon</button>
        <button onclick="">Tablespoon</button>
        <button onclick="">Cup</button>
        <button onclick="">Quart</button>
        <button onclick="">Pint</button>
        <button onclick="">Liter</button>
        <button onclick="">Dash</button>
        <button onclick="">Pinch</button>
      </div>
    </div>
    
    =
    
    <input type="text" id="input-2" name="Second Amount">
    
    <div class="dropdown">
      <button class="dropbtn">Units</button>
      <div class="dropdown-content">
        <button onclick="">Teaspoon</button>
        <button onclick="">Tablespoon</button>
        <button onclick="">Cup</button>
        <button onclick="">Quart</button>
        <button onclick="">Pint</button>
        <button onclick="">Liter</button>
        <button onclick="">Dash</button>
        <button onclick="">Pinch</button>
      </div>
    </div>
    
    <input type="submit" value="Submit">
  </form>
  <script src="script.js"></script>
</body>

JavaScript部分(实时获取输入值,阻止默认提交)

// 获取表单元素
const form = document.getElementById('conversionForm');

// 监听表单提交事件
form.addEventListener('submit', function(e) {
  // 阻止表单默认提交刷新页面
  e.preventDefault();
  
  // 提交时才获取用户最新输入值
  const unit1 = document.getElementById("input-1").value;
  const unit2 = document.getElementById("input-2").value;
  
  // 这里是临时相加逻辑,后续替换为实际单位转换公式即可
  const conversion = parseFloat(unit1) + parseFloat(unit2);
  
  // 直接显示计算结果
  alert(conversion);
});

后续实现单位转换逻辑时,只需要把conversion的计算部分替换为对应换算公式即可(比如teaspoon转tablespoon是除以3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:30:45