表行不计算页面加载

时间:2013-01-23 18:35:24

标签: javascript jquery html

我有一个包含列总计和行总计的表。我设置了当有人在输入字段中输入数字时,它会在键盘和页面加载时计算它们。列在页面加载时重新计算很好,但行重置为零。

// 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()一样简单;在功能,但这不起作用。我有什么想法我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

页面加载时没有this。所以它找不到thisRow。违规行为var thisRow = $(this).closest('tr');

我过去这样做的方法是找到有问题的第一个输入并触发事件,从而调用带有完全膨胀事件的方法。

例如,不要直接拨打newSum();,而是拨打$('input').first().trigger('keyup'),这会自动调用newSum功能。

编辑:http://jsfiddle.net/DTPZQ/3/