1 回答
TA贡献1847条经验 获得超7个赞
只需对任何更改运行相同的函数
添加了 thead、tbody 和 tfoot 并修复了总计的行跨度
使用 jQuery map 和 JS reduce 来获取总数
使用最接近的导航字段。
$(input).closest("td").next().find("input").val();
如果你给行总计一个类,你可以简化
$(function() {
$("tbody").on("input", function() {
const totalPrice = $(".price").map(function(i, input) {
const val = input.value && !isNaN(input.value) ? +input.value : 0;
$(input).closest("tr").find("td").eq(4).text(val)
return val;
}).get().reduce((acc, cur) => { acc += cur; return acc; }, 0)
$("#totalprice").text(totalPrice);
const totalEach = $(".price").map(function(i, input) {
const price = input.value && !isNaN(input.value) ? +input.value : 0;
let discount = $(input).closest("td").next().find("input").val();
discount = discount && !isNaN(discount) ? +discount : 0;
const val = (price - price * (discount/100))
$(input).closest("tr").find("td").eq(4).text(val.toFixed(2))
return val;
}).get().reduce((acc, cur) => { acc += cur; return acc; }, 0)
$("#totalEach").text(totalEach.toFixed(2))
const totalDiscount = $(".discount").map(function(i, input) {
return input.value && !isNaN(input.value) ? +input.value : 0;
}).get().reduce((acc, cur) => {
acc += cur;
return acc
}, 0)
$("#totaldiscount").text(totalDiscount);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<th>Name</th>
<th>Items</th>
<th>Price in dollar</th>
<th>Discount %</th>
<th>Total Each</th>
</tr>
</thead>
<tbody>
<tr>
<td>Name 1</td>
<td>Item 1</td>
<td><input class='price' name="price[xxx]" type="text"></td>
<td><input class='discount' name="discount[xxx]" type="text"></td>
<td></td>
</tr>
<tr>
<td>Name 1</td>
<td>Item 1</td>
<td><input class='price' name="price[yyy]" type="text"></td>
<td><input class='discount' name="discount[yyy]" type="text"></td>
<td></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2">Grand Total</td>
<td><span id="totalprice"></span></td>
<td><span id="totaldiscount"></span></td>
<td id="totalEach"> </td>
</tr>
</tfoot>
</table>
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报