在我的web应用程序中,我使用JavaScript动态地将表行添加到表中。
每一行都有数量列、单位金额列和行合计列。
在将记录添加到表中之后,用户还可以删除该行。
在此场景中,我希望获取Line Totalcol值的总和,以显示为Total Value
如何使用JavaScript计算?
这是我目前的代码。
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="~/Scripts/jquery-3.6.4.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<div class="table-responsive text-nowrap">
<table class="table table-striped" id="submissionTable">
<thead>
<tr>
<th>#</th>
<th>ITEM</th>
<th>QTY</th>
<th>MEASURE BY</th>
<th>UNIT PRICE</th>
<th>LINE TOTAL</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr id="tablerow0"></tr>
</tbody>
</table>
<p>
<button id="add" type="button" class="btn btn-primary">Add</button>
</p>
</div>
这就是如何动态地向表中添加行。
var counter = 1;
var dropdownOptions = @Html.Raw(Json.Encode(ViewBag.Item_ID));
$(function () {
$("#add").click(function () {
var newRow = $(
'<tr id="tablerow' +
counter +
'" class ="poSet"> ' +
"<td>" +
'<label id="CountItems"><strong>' +
counter +
"</strong></label>" +
"</td>" +
'<td width="40%">' +
'<select onchange="sendInfo(this)" class="form-select ItemId" data-id= ' + counter + ' name="Item_Id[' +
counter +
']" id="ItemId[' + counter + ']" required="required" ' +
"</select>" +
"</td>" +
'<td width="10%">' +
'<input type="text" class="form-control Qty" name="Qty[' +
counter +
']" value="1" id="Qty[' + counter + ']" onchange="calQtyBase(this)" data-QtyId= ' + counter + ' required="required" />' +
"</td>" +
'<td width="10%">' +
'<input type="text" class="form-control" name="MeasureBy[' +
counter +
']" value="" id="MeasureBy[' + counter + ']" readonly />' +
"</td>" +
'<td width="20%">' +
'<input type="text" class="form-control UnitPrice" name="Unit_Price[' +
counter +
']" value="0.00" id="UnitPrice[' + counter + ']" onchange="priceBase(this)" data-PriceId= ' + counter + ' required="required" />' +
"</td>" +
'<td width="20%">' +
'<input type="text" class="form-control LineTotal" name="Line_Total[' +
counter +
']" value="0.00" id="LineTotal[' + counter + ']" required="required" />' +
"</td>" +
"<td>" +
'<button type="button" class="btn btn-danger" onclick="removeTr(' +
counter +
');">x</button>' +
"</td>" +
"</tr>"
);
var selectElement = newRow.find("select");
dropdownOptions.forEach(function (option) {
var optionElement = $("<option>").val(option.Value).text(option.Text);
selectElement.append(optionElement);
});
newRow.appendTo("#submissionTable");
selectElement.select2();
counter++;
return false;
});
});
这里我写了一个2的JavaScript来计算OnChange事件中数量或单价发生变化时的行合计
function calQtyBase(e) {
var dataId = e.getAttribute("data-QtyId");
var Qty = document.getElementById('Qty[' + dataId + ']').value;
var UnitAmount = parseFloat(document.getElementById('UnitPrice[' + dataId + ']').value);
var total = Qty * UnitAmount;
document.getElementById('LineTotal[' + dataId + ']').value = parseFloat(Math.round(total * 100) / 100).toFixed(2);
}
function priceBase(e) {
var dataId = e.getAttribute("data-PriceId");
var Qty = document.getElementById('Qty[' + dataId + ']').value;
var UnitAmount = parseFloat(document.getElementById('UnitPrice[' + dataId + ']').value);
var total = Qty * UnitAmount;
document.getElementById('LineTotal[' + dataId + ']').value = parseFloat(Math.round(total * 100) / 100).toFixed(2);
}
3条答案
按热度按时间qzlgjiam1#
您可以循环遍历
lineTotal
输入框,并使用+=
在每次迭代中添加每个输入的值,然后将此值分配给任何div以显示total。此外,我在你当前的代码中做了一些小的修改,所以不是多个函数,而是添加了更改处理程序,它将调用数量和价格更改,并在该处理程序中调用
calculate_total
函数来更新总数。演示代码:
byqmnocz2#
aelbi1ox3#
在这种情况下,你可以很容易地编写一个函数来添加一行的所有列:
HTML
现在你可以添加一个table helper类,它使用
querySelector
和querySelectorAll
来获取表的列和行(通过tr
和td
):接下来,您需要添加函数来对数量行和价格行求和:
sumQuantity
使用表头“Quantity”来计算其总和,而sumPrice
使用列索引来计算整个列的总和。~希望这有帮助