我有一个包含列总计和行总计的表。我设置了当有人在输入字段中输入数字时,它会在键盘和页面加载时计算它们。列在页面加载时重新计算很好,但行重置为零。
// Calculate Sum Of Rows
$(function() {
$('input').live('keyup', newSum);
newSum();
});
function newSum() {
var sum = 0;
var thisRow = $(this).closest('tr');
//iterate through each input and add to sum
$(thisRow).find("input:not(.ignore):not(.description):not(.miles)").each(function() {
val = parseFloat(this.value);
sum += isNaN(val) ? 0 : val;
});
//change value of total
$(thisRow).find(".sumtotalclaimed").html(sum);
}
以下是列的代码,它完美地工作(在页面加载时重新计算):
// Calculate Sum Of Columns
$(function() {
$('input.miles').live('keyup', calculateSum1);
calculateSum1();
} );
function calculateSum1() {
var sum = 0;
//iterate through each textboxes and add the values
$("input.miles").each(function() {
//add only if the value is number
if(!isNaN(this.value) && this.value.length!=0) {
sum += parseFloat(this.value);
}
});
//.toFixed() method will roundoff the final sum to 2 decimal places
$("#summiles").html(sum);
}
我认为这就像放置newSum()一样简单;在功能,但这不起作用。我有什么想法我做错了吗?
谢谢!
答案 0 :(得分:1)
页面加载时没有this
。所以它找不到thisRow
。违规行为var thisRow = $(this).closest('tr');
我过去这样做的方法是找到有问题的第一个输入并触发事件,从而调用带有完全膨胀事件的方法。
例如,不要直接拨打newSum();
,而是拨打$('input').first().trigger('keyup')
,这会自动调用newSum
功能。