javascript - 使用 Javascript 更新表总计

标签 javascript jquery

我最近使用 jQuery 在表中添加了一些功能,允许用户动态添加/删除表行,效果很好。然而,在这样做的过程中,我破坏了根据输入表行中某些单元格的值自动计算总计的功能,我一生都无法弄清楚我是如何破坏它的,也无法弄清楚如何修复它。

我还注意到删除表格行也不会更新总计(这是我添加的新功能)。

下面是运行的脚本,用于计算单行每周的平均小时数 - 它还应该同时更新表格底部的总中度或高度字段:

$(window).load(function(){
//Sum Table Cell and Map

$('#lastYear')
.on('change', 'select', calc)
.on('keyup', 'input', calc);

function calc(){

    $('#lastYear tr:has(.risk)').each(function(i,v){

        var $cel = $(v.cells);

        var $risk = $cel.eq(1).find('option:selected').val();
        var $numb = $cel.eq(2).find('input').val();
        var $weeks = $cel.eq(3).find('input').val();
        var $avg = ($numb * $weeks) / 52;
        var $avgRounded = Math.round( $avg * 10 ) / 10;

        $cel.eq(4).find('input').val($avgRounded);

    });   

    var tot = {high:0,moderate:0}; 

    $('#lastYear tr:has(.risk) option:selected')
                .map(function(i){
                    var el = $(this).val();
                    var qty = parseFloat($('#lastYear tr:has(.risk)').eq(i).find('td:last').prev().find('input').val());

                    if (!tot.hasOwnProperty(el)) {
                        tot[el] = 0;            
                    }
                    tot[el] += qty
                    return tot;
                }).get();

    // console.log(tot);
     $('#textfield4').val(tot.moderate.toFixed(1));
    $('#textfield5').val(tot.high.toFixed(1));

}

});//]]>  

我已经设置了 jsFiddle显示当前功能 - 您可以查看是否生成平均值,但在输入数据时生成总计“NaN”结果,并且当您单击“删除”按钮时,它也应该更新总计。

更新:我认为问题是脚本正在查找最后一个表格单元格,然后转到前一个表格单元格来获取值。当平均单元格是倒数第二个单元格时,这曾经有效,但不是倒数第三个单元格,而且我不知道如何按名称/ID 等查找该单元格。有什么想法吗?

我是 Javascript 新手,花了将近一天的时间来解决这个问题,非常感谢对此的帮助。

最佳答案

Working jsFiddle Demo

在您想要的输入之后,您有2个td。所以你必须调用 prev 方法两次:

var qty = parseFloat(
    $('#lastYear tr:has(.risk)').eq(i).find('td:last')
        .prev().prev() // call prev method twice
        .find('input').val()
);

关于javascript - 使用 Javascript 更新表总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525672/

相关文章:

jquery - 如果选中复选框,则会出现 div

javascript - 为什么我的函数使用 javascript 获取 div 的完整高度不起作用?

javascript - Axios 后调用无法按预期工作

jquery - 如何禁用 primefaces 中数据表的行选择

javascript - 从外部打破循环

javascript - Jquery 替换文本而不删除列表

javascript - Angular 自定义焦点指令。聚焦表单的第一个无效输入

javascript - 流体网格布局

javascript - 如何在 Jquery 中延迟 for 循环

jQuery .each() 函数。重置索引?