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

HTML表格加载时字段未自动计算?如何确保函数执行行总和计算

表格行总和加载时自动计算问题解决

问题原因分析

  1. 页面加载时不自动计算的原因:当前代码仅通过输入框的onchange事件触发sum_row_qty函数,页面加载完成后没有主动调用该函数,因此加载阶段不会执行任何行总和计算逻辑。
  2. else分支未运行的原因:sum_row_qty的else分支仅在传入的el参数为undefined时才会执行,但目前没有任何代码在页面加载时以无参数的方式调用该函数,所以else分支从未被触发。

修复方案

1. 修复函数逻辑缺陷

当前函数中if (rowTotal)的判断会忽略总和为0的情况(因为0在布尔判断中为false),导致总和为0时不会更新到total输入框。同时添加|| 0避免输入值为空时出现NaN,修改后的函数如下:

function sum_row_qty(el, poOrigin) {
  let rowTotal = 0
  if (el) {
    let parent = el.closest("tr")
    parent.querySelectorAll('.size_qty').forEach(function(e) {
        rowTotal += parseFloat(e.value) || 0;
    })
    // 无论总和是多少都赋值,包括0的情况
    parent.querySelector('.qty').value = rowTotal;
  } else {
    // 遍历所有行的第一个size_qty输入框,触发行计算
    document.querySelectorAll("#tableRows > tr > td:first-child input.size_qty").forEach(sum_row_qty);
  }
}

2. 页面加载时主动触发计算

在页面DOM加载完成后,无参数调用sum_row_qty(),触发else分支遍历所有行计算总和。可以通过DOMContentLoaded事件实现:

// 页面加载完成后自动计算所有行总和
document.addEventListener('DOMContentLoaded', function() {
  sum_row_qty();
});

完整修改后的代码

JavaScript

function sum_row_qty(el, poOrigin) {
  let rowTotal = 0
  if (el) {
    let parent = el.closest("tr")
    parent.querySelectorAll('.size_qty').forEach(function(e) {
        rowTotal += parseFloat(e.value) || 0;
    })
    parent.querySelector('.qty').value = rowTotal;
  } else {
    document.querySelectorAll("#tableRows > tr > td:first-child input.size_qty").forEach(sum_row_qty);
  }
}

// 页面加载完成后自动计算所有行总和
document.addEventListener('DOMContentLoaded', function() {
  sum_row_qty();
});

HTML

<table class="table table-hover table-vcenter" id="dtable">
  <thead>
    <tr>
      <th style="width:4%; text-align: left">OS</th>
      <th style="width:4%">XS</th>
      <th style="width:4%">Total</th>
    </tr>
  </thead>
  <tbody id="tableRows">
    <tr>
      <td><input class="size_qty" type="number" min="0" name="numberInputs" value="14" onchange="sum_row_qty(this);"></td>
      <td><input class="size_qty" type="number" min="0" name="numberInputs" value="0" onchange="sum_row_qty(this)"></td>
      <td><input type="number" min="0" class="qty" name="numberInputs" value="" readonly="true"></td>
    </tr>
    <tr>
      <td><input class="size_qty" type="number" min="0" name="numberInputs" value="14" onchange="sum_row_qty(this);"></td>
      <td><input class="size_qty" type="number" min="0" name="numberInputs" value="0" onchange="sum_row_qty(this);"></td>
      <td><input type="number" min="0" class="qty" name="numberInputs" value="" readonly="true"></td>
    </tr>
  </tbody>
</table>

关键说明

  • 无参数调用sum_row_qty()时,el为undefined,进入else分支,遍历所有行的第一个size_qty输入框,逐个触发行计算逻辑。
  • 添加|| 0处理输入框值为空的情况,避免parseFloat返回NaN导致总和异常。
  • 去掉if(rowTotal)判断,确保总和为0时也能正确显示到total输入框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:35:30