我有一个这样的页面:

[http://jsfiddle.net/ph75fggo/]
[http://jsfiddle.net/ph75fggo/5/]//more reliable sample


而且我尝试制作一个简单的收银应用程序,借助JavaScript在行和列上进行自动计数。

这是我想要得到的结果:

http://jsfiddle.net/wrz8bc10/

我的最终尝试:jsfiddle.net

最佳答案

您的问题并未清楚说明您的要求。据我了解,您需要扣除每一行的折扣以及最后的折扣和净额后的总额。

您应该做的第一件事是为每个tr的每个孩子分配一个公共类。它使您的JS代码更加简单。否则,您需要编写一些额外的LOC来选择特定元素。

<tr>
    <td><input type='text' class="amount" id='harga2' value='250000' /></td>
    <td><input type='text' class="discount" id='diskon2' value='' /></td>
    <td><input type='text' class="grossAmount" id='total2' value='' /></td>
</tr>
<tr>
    <td><input type='text' class="amount" id='harga2' value='250000' /></td>
    <td><input type='text' class="discount" id='diskon2' value='' /></td>
    <td><input type='text' class="grossAmount" id='total2' value='' /></td>
</tr>
<tr>
    <td><input type='text' class="amount" id='harga2' value='250000' /></td>
    <td><input type='text' class="discount" id='diskon2' value='' /></td>
    <td><input type='text' class="grossAmount" id='total2' value='' /></td>
</tr>


之后,您可以使用以下功能:

function myFunction(){
    var amounts = document.getElementsByClassName("amount");
    var discounts = document.getElementsByClassName("discount");
    var gAmounts = document.getElementsByClassName("grossAmount");
    var lv,rowSum,totDis=0,totAmount=0;
    for(lv=0;lv>gAmounts.length;lv++){
        rowSum += (parseInt(amounts[lv].value)-parseInt(discounts[lv].value));
        totAmount += rowSum;
        totDis += parseInt(discounts[lv].value);
        gAmounts[lv].value = totAmount;
    }
}


但是,如果您不想更改HTML,则可以使用以下代码:

function myFunc(){
    var lv,rowSum,totDis=0,totAmount=0;
    var TRs = document.getElementsByTagName("table")[0].childNodes; //assuming that the table is the first one on your page.
    var lv;
    for(lv=1;lv<tab.length;lv++){ // starting the counter with 1 as the first child of the table contains headings
        rowSum += (parseInt(TRs[lv][0].value)-parseInt(TRs[lv][1].value));
        totAmount += rowSum;
        totDis += parseInt(TRs[lv][1].value);
        TRs[lv].value = rowSum;
    }
}

10-04 16:46