JavaScript实现HTML表格行乘积与列汇总总和为0问题排查
问题原因
- 选择器逻辑错误:原代码
$("#quantum tr > tbody td:nth-child(3)")层级写反,无法匹配到任何元素,遍历逻辑完全没有执行,总和始终为初始值0 - 取值逻辑错误:行乘积结果存储在
total_price类的输入框value属性中,原代码尝试读取td的文本内容,永远无法拿到有效数值 - 列索引错误:即使选择器逻辑正确,第3个
td是乘数输入列,存储乘积结果的是第4个td内的输入框,索引匹配完全错误
修复方案
直接替换原JS函数即可,修复后逻辑更清晰,避免复杂层级选择器带来的匹配错误:
function add_to_total(el) { var parent = $(el).closest('tr'); var price = parent.find('.price').val() == "" ? 1 : parent.find('.price').val(); var qty = parent.find('.qty').val() == "" ? 1 : parent.find('.qty').val(); var total = (price * qty).toFixed(2); parent.find('.total_price').val(total); var gtot = 0; // 直接遍历所有行的乘积输入框取值,逻辑简单不易出错 $("#quantum tbody .total_price").each((_, input) => { gtot += Number($(input).val()) || 0; }); // 汇总结果保留两位小数,和行乘积格式统一 $("#sum1").text(gtot.toFixed(2)); }
内容的提问来源于stack exchange,提问作者lostinspace
相关产品推荐
相关产品推荐

