我是在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" />
答案 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
单元格。