【发布时间】:2020-03-19 03:57:04
【问题描述】:
我已经检查了 SO 上所有可以想到的问题,但没有找到解决我问题的问题。我最接近的是this。
在我的 Django 应用程序中,我有一个动态表,其中包含价格、数量和金额(价格 * 数量)列以及其他字段。我希望得到“amount”列的总和。可以在运行时添加行,出于测试目的,我将默认行数保持为 3(inlineformset_factory 中的extra = 2)。
我正在使用以下 jquery 来计算“amount”列中的值:
$(document).ready(function() {
mySum=0;
$("#process").click(function() {
$(".itemPriceClass").each(function() {
mySum += parseFloat($('.itemPriceClass input').val());
alert('The sum of item amount is: ' + mySum);
});
});
});
在哪里:
“itemPriceClass”是Amount列中的<td>类。
“process”是按钮的id,用于获取要执行的功能。
但是,在执行时(表中默认的三行,只填写了第一行),我发现函数执行了三次(虽然最后两行没有任何数据)最后的总数正好是第一行金额单元格值的三倍。
我尝试按照建议的here(如下所示)在线构建函数,但“value”变量在查询时返回“空白”,因此无法通过此路线。
var sum = 0;
// iterate through each td based on class and add the values
$(".price").each(function() {
var value = $(this).text();
// add only if the value is number
if(!isNaN(value) && value.length != 0) {
sum += parseFloat(value);
}
});
我试图停止函数循环 3 次(类似于当单元格值为 0 时退出循环),但无法实现它。
所以我的问题是:
为什么我的函数会循环三次(即行数),从而将第一行输入的单元格值相加?
【问题讨论】:
-
可能是因为
mySum += parseFloat($('.itemPriceClass input').val());- 它为每一行提供 3 个input。写成mySum += parseFloat($(this).find('input').val());