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

如何实现点击提交多次展示HTML表单值不覆盖并累计总重量

前端表单提交问题修复方案

问题根因说明

你遇到的问题不止是变量作用域的问题,原代码有3个显性错误:

  • HTML结构写错:<form>标签第一行就提前闭合(<form action="#"></form>),且<body>标签位置错误,所有表单控件、展示节点都写在了body标签外面,不符合HTML规范
  • submit按钮默认会触发表单提交刷新页面,刷新后之前JS渲染的页面内容会全部重置
  • 给结果节点赋值时用=直接覆盖属性值,就算不刷新页面,新提交的内容也会直接替换掉旧内容,不会保留历史记录

具体修复方法

1. 保留历史提交记录

  • 先修正HTML结构:把提前闭合的form起始标签改对,所有页面可见内容全部包裹在<body>标签内部,表单控件全部放到form标签内部
  • 给submit点击事件加阻止默认行为的逻辑,禁止页面刷新
  • 渲染单条记录时用+=做内容追加,不要用=直接覆盖,每条记录末尾加换行标签做排版
  • 每次提交成功后清空输入框,方便下一次录入

2. 展示所有重量累计总和(无循环实现)

不需要写循环遍历,只要在点击事件的外部定义一个全局累计变量,初始值设为0。每次提交计算出当前单条的乘客+货物总重量后,直接把当前单条重量加到累计变量上,再把累计值渲染到总重展示节点即可。


修复后完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>重量统计表单</title>
</head>
<body>
    <form action="#">
        <label for="First-name">First name: </label>
        <input type="text" id="First-name" placeholder="Please insert first name."><br>
        <label for="Second-name">Second name:   </label>
        <input type="text" id="Second-name" placeholder="Please insert second name"> <br>
        <label for="Passenger-weight">Passengers weight:   </label>
        <input type="number" class="weight" id="Passenger-weight" placeholder="Please enter passengers weight"><br>
        <label for="cargo-weight">cargo weight:   </label>
        <input type="number" class="weight" id="cargo-weight" placeholder="Please enter cargo weight"><br>
        <input type="submit" id="submit"><br> 
    </form>
    <p id="sum"></p>
    <div id="sumoftotal"></div>

    <script>
        // 全局累计总重,定义在事件外,不会因为函数执行结束被重置
        let allWeightTotal = 0;
        document.getElementById("submit").onclick = function(e){
            // 阻止表单默认提交刷新行为
            e.preventDefault();
            // 获取表单值
            let firstName = document.getElementById("First-name").value;
            let lastName= document.getElementById("Second-name").value;
            let num1 = document.getElementById("Passenger-weight").value;
            let num2 = document.getElementById("cargo-weight").value;
            // 计算单条总重,做空值兜底,没输入值默认按0计算
            let currentTotal = parseInt(num1 || 0) + parseInt(num2 || 0); 
            // 追加单条记录,不覆盖之前的内容
            document.getElementById("sum").innerHTML += `${firstName} ${lastName} 本次录入总重:${currentTotal}kg<br>`;
            // 累加总重
            allWeightTotal += currentTotal;
            // 渲染累计总重
            document.getElementById("sumoftotal").innerText = `所有记录累计总重量:${allWeightTotal}kg`;
            // 清空输入框
            document.getElementById("First-name").value = '';
            document.getElementById("Second-name").value = '';
            document.getElementById("Passenger-weight").value = '';
            document.getElementById("cargo-weight").value = '';
        }
    </script> 
</body>
</html>

代码额外加了空值兜底逻辑:如果重量输入框没填值,会默认按0计算,不会出现NaN的异常结果;同时修正了原代码里First name输入框的placeholder拼写错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:24:29