2 回答

TA貢獻2051條經(jīng)驗 獲得超10個贊
您需要獲取需要使用設(shè)置更新值的文本框的引用data("kendoNumericTextBox"),然后使用它設(shè)置新值.value("newwvalue"),這將根據(jù)您之前設(shè)置的格式更新新值。
另外,用于$(this).attr("aria-valuenow")獲取沒有任何貨幣的文本框的原始值,并將選擇器更改為$(".k-formatted-value.charges")僅從特定文本框獲取輸入值。當(dāng)前,當(dāng)您檢查生成的 html 時,它有 2 個具有相同類的輸入框,這就是總和不是的原因在職的。
演示代碼:
$("#TotalDirectLaborCharges, #TotalIndirectLaborCharges, #TotalContractCharges, #TotalTravelCharges, #TotalAdjustments, #TotalAdjustments, #CostsAlreadyPaid, #Other, #NetInvoicedAmount ,#SubtotalOfCharges").kendoNumericTextBox({
decimals: 2,
format: "c"
});
//add both selector
$(document).on("change", ".charges,.sub", function() {
var calculated_total_sum = 0;
$(".k-formatted-value.charges").each(function() {
//get original value without currecny
var get_textbox_value = $(this).attr("aria-valuenow");
if ($.isNumeric(get_textbox_value)) {
calculated_total_sum += parseFloat(get_textbox_value);
}
});
//get kendo textbox
var numerictextbox = $("#SubtotalOfCharges").data("kendoNumericTextBox");
//set value
numerictextbox.value(calculated_total_sum);
});
//add both selector
$(document).on("change", ".sub ,.charges", function() {
//get value from inputbox
var netInvoicedAmount = $("#SubtotalOfCharges").data("kendoNumericTextBox").value();
$(".k-formatted-value.sub").each(function() {
//get original value
var get_textbox_value = $(this).attr("aria-valuenow");
if ($.isNumeric(get_textbox_value)) {
netInvoicedAmount -= parseFloat(get_textbox_value);
}
});
//set value in invoice amt
var numerictextbox = $("#NetInvoicedAmount").data("kendoNumericTextBox");
numerictextbox.value(netInvoicedAmount);
});
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.common.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.rtl.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.default.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.mobile.all.min.css">
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.3.1021/js/angular.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.3.1021/js/jszip.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.3.1021/js/kendo.all.min.js"></script>
<div class="quarter m-l-lg m-y text-right">
<label class="m-r-lg required" asp-for="TotalDirectLaborCharges">Total Direct Labor Charge<br /></label>
<input id="TotalDirectLaborCharges" class="charges" /><br />
<label class="m-r-lg required" asp-for="TotalIndirectLaborCharges">TotalIndirectLaborCharges<br /></label><br />
<input id="TotalIndirectLaborCharges" class="charges" /><br />
<label class="m-r-lg required" asp-for="TotalContractCharges">TotalContractCharges</label><br />
<input id="TotalContractCharges" class="charges" /><br />
<label class="m-r-lg required" asp-for="TotalTravelCharges">TotalTravelCharges</label><br />
<input id="TotalTravelCharges" class="charges" /><br />
<label class="m-r-lg required" asp-for="TotalAdjustments">TotalAdjustments</label><br />
<input id="TotalAdjustments" class="sub" /><br />
<label class="m-r-lg required" asp-for="CostsAlreadyPaid">CostsAlreadyPaid</label><br />
<input id="CostsAlreadyPaid" class="sub" /><br />
<label class="m-r-lg required" asp-for="Other">Other</label><br />
<input id="Other" class="sub" /><br />
<label class="m-r-lg required" asp-for="SubtotalOfCharges">SubtotalOfCharges</label><br />
<input id="SubtotalOfCharges" readonly class="sub-total-Of-Charges" />
<br />
<label class="m-r-lg required" asp-for="Other">NetInvoicedAmount</label><br />
<input id="NetInvoicedAmount" readonly class="netInvoicedAmount" />
</div>

TA貢獻1783條經(jīng)驗 獲得超4個贊
由于您在項目中使用了 jQuery,因此我也使用該庫編寫了這個答案。
$(document).ready(function() {
? let $references = {
? ? subtotal: $('#SubtotalOfCharges').first(),
? ? net: $('#NetInvoicedAmount').first(),
? ? fields: {
? ? ? subtract: $('input.sub'),
? ? ? charge: $('input.charges')
? ? }
? }
??
? function calculateSum($elements) {
? ? return Array.from($elements).reduce((previousValue, element) => {
? ? ? val = $(element).val();
? ? ??
? ? ? if(val)
? ? ? ? previousValue += parseFloat($(element).val());
? ? ??
? ? ? return previousValue;
? ? }, 0)
? }
??
? $(document).on('change', 'input', function() {
? ? let sum = {
? ? ? subtract: calculateSum($references.fields.subtract),
? ? ? charge: calculateSum($references.fields.charge),
? ? }
? ??
? ? $references.subtotal.val(sum.charge);
? ? $references.net.val(sum.charge - sum.subtract);
? });
})
input,
label {
? display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>Total Direct Labor Charge</label>
<input id="TotalDirectLaborCharges" class="charges">
<label>TotalIndirectLaborCharges</label>
<input id="TotalIndirectLaborCharges" class="charges">
<label>TotalContractCharges</label>
<input id="TotalContractCharges" class="charges">
<label>TotalTravelCharges</label>
<input id="TotalTravelCharges" class="charges">
<label>TotalAdjustments</label>
<input id="TotalAdjustments" class="sub">
<label>CostsAlreadyPaid</label>
<input id="CostsAlreadyPaid" class="sub">
<label>Other</label>
<input id="Other" class="sub">
<label>SubtotalOfCharges</label>
<input id="SubtotalOfCharges" readonly class="sub-total-Of-Charges">
<label>NetInvoicedAmount</label>
<input id="NetInvoicedAmount" readonly class="net-invoiced-amount">
它是如何工作的?
為了計算小計/凈額,您可以將事件處理程序綁定到兩個輸入組并運行一次計算,而不是在( 或) 更改
change
時手動觸發(fā)事件。.sub
.charges
我曾經(jīng)
$references
稍微整理過代碼,并reduce function
使用 a 來計算字段組的總和。Array.from
用于從 jQuery 對象創(chuàng)建本機 Javascript 數(shù)組。
添加回答
舉報