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

需求:实现HTML表格输入数据时动态更新差异百分比的JavaScript

解决方案

1. 确认表格结构

先给表格关键单元格添加类名,方便JS定位,示例结构如下:

<table id="data-table">
  <tr>
    <th>Design Data</th>
    <th>Data 1</th>
    <th>Data 2</th>
    <th>% of Difference</th>
  </tr>
  <tr>
    <td><input type="number" class="design-data" value="200"></td>
    <td><input type="number" class="data-input"></td>
    <td><input type="number" class="data-input"></td>
    <td class="diff-percent">0%</td>
  </tr>
  <!-- 更多数据行... -->
</table>

2. 修改后的JavaScript逻辑

核心是监听Data1/Data2输入框的变化,实时用当前行的Design Data计算百分比:

// 用事件委托监听表格内的输入事件,支持动态新增行
document.getElementById('data-table').addEventListener('input', function(e) {
  // 只处理Data1/Data2的输入框
  if (!e.target.classList.contains('data-input')) return;

  const currentRow = e.target.closest('tr');
  // 获取设计值和当前输入值,空值或非数字默认设为0
  const designValue = parseFloat(currentRow.querySelector('.design-data').value) || 0;
  const inputValue = parseFloat(e.target.value) || 0;

  // 避免除数为0的异常情况
  if (designValue === 0) {
    currentRow.querySelector('.diff-percent').textContent = 'N/A';
    return;
  }

  // 计算差异百分比:(输入值 / 设计值) * 100
  const percentage = (inputValue / designValue) * 100;
  // 按需求保留精度,这里取整数
  currentRow.querySelector('.diff-percent').textContent = `${Math.round(percentage)}%`;
});

关键修改点

  • 放弃仅依赖Final Data的逻辑,改为监听Data1/Data2的输入事件,直接用当前输入值计算
  • 用事件委托替代逐个绑定事件,更高效且兼容动态添加的行
  • 增加除数为0的判断,避免出现NaN或无限大的错误显示

验证效果

  • Design Data设为200,Data1输入100 → 差异百分比显示50%
  • Design Data设为200,Data2输入150 → 差异百分比显示75%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:03:27