如何使用jquery编程和计算多个小计和总计?

时间:2010-05-08 21:46:28

标签: jquery

我是在jquery中弄清楚如何执行此操作,我需要在没有任何插件的情况下执行此操作。想象一下购物车的书籍,每次更改数量(使用选择下拉列表)都会更新总价,格林威治标准,然后是隐藏的输入值。

<table>
<tr> 
    <td class="qty"> 
        <select class="item-1">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        ...
        </select>
    </td> 
    <td class="product"> 
        Book 1 
    </td> 
    <td class="price-item-1"> 
        $20
    </td> 
    <td class="total-item-1"> 
        $20
    </td> 
</tr>
<tr> 
    <td class="qty"> 
        <select class="item-2">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        ...
        </select>
    </td> 
    <td class="product"> 
        Book 2 
    </td> 
    <td class="price-item-2"> 
        $10
    </td> 
    <td class="total-item-2"> 
        $10
    </td> 
</tr>
...
...
<tr> 
    <td colspan="3" align="right"> 
        <strong>Grand Total:</strong> 
    </td> 
    <td class="grandtotal">
    </td> 
</tr> 
</table>

<input type="hidden" id="qty-item-1" value="0"  />
<input type="hidden" id="total-item-1" value="0"  />

<input type="hidden" id="qty-item-2" value="0"  />
<input type="hidden" id="total-item-2" value="0"  />

1 个答案:

答案 0 :(得分:9)

这应该让你开始:

$("select").change(function() {
    var qty = $(this).val();

    // get the price cell by moving up a level and searching for
    // the descendant with a class name beginning with `price'.
    // Remove the dollar sign to do math
    var price = $(this).closest("tr")
                       .find("td[class^=price]")
                       .html().split("$")[1];

    // a quantity is a whole number but a price is a float
    var total = parseInt(qty) * parseFloat(price);

    // write the total for this book to the 'total' cell
    $(this).closest("tr")
           .find("td[class^=total]")
           .html("$" + total);

    // sum up all the totals
    var grandTotal = 0;
    $("td[class^=total]").each(function() {
        grandTotal += parseFloat($(this).html().split("$")[1]); 
    });

    // update the grandtotal cell to the new total
    $(".grandtotal").html("$" + grandTotal);
});​

换句话说,你需要:

1 - 从所选选项的值中获取数量。

2 - 从类别以“price”开头的同一行中的单元格中获取价格,将其乘以数量,然后更新同一行的“总计”单元格。

3 - (重新)计算总计(所有总计的总和)并将该值放入.grandtotal单元格。

在此处试试:http://jsfiddle.net/kYssr/4/