[英]Calculate Total value for two input fields based on items selected from a select option tag in table
我想根据选择的类型将“ 金额传递”的值传递给“ 借方金额”或“ 贷方金额 ”,如果选择“ DR” ,则该值应传递给“ 借方金额” ,如果选择了“ CR” ,则应将该值传递给“ 贷方”金额 。 如果选择了多个类型选项,则应传递总金额
HTML
<div>
<label style="margin-bottom:3px;">Debit Amount</label><span>
<input type="text" name="total_debit" id="totalDebit"/></span>
</div>
<div>
<label>Credit Amount</label><span>
<input type="text" name="total_credit" id="totalCredit" /></span>
</div>
<table class="table-bordered table-hover">
<thead>
<tr>
<th width="2%"><input id="check_all" type="checkbox"/></th>
<th width="5%">Type</th>
<th width="5%">Account Code</th>
<th width="15%">Account Name</th>
<th width="10%">Fund</th>
<th width="10%">Amount</th>
</tr>
</thead>
<tbody>
<tr>
<td><input class="case" type="checkbox"/></td>
<td><select name="account_id[]" class=" mySelect" id="type_1">
<option value="000"></option>
<option value="1">DR</option>
<option value="2">CR</option>
</select>
</td>
<td>
<input type="text" name="accountCode[]" id="accountCode_1">
</td>
<td>
<input type="text" name="accountName[]" id="accountName_1"></td>
<td>
<select name="fund_id[]" >
<option></option>
</select>
</td>
<td>
<input type="text" name="amount[]" id="amount_1" class="totalLineAmount">
</td>
</tr>
<tr>
<td><input class="case" type="checkbox"/></td>
<td><select name="account_id[]" class=" mySelect" id="type_2">
<option value="000"></option>
<option value="1">DR</option>
<option value="2">CR</option>
</select>
</td>
<td>
<input type="text" name="accountCode[]" id="accountCode_2">
</td>
<td>
<input type="text" name="accountName[]" id="accountName_2"></td>
<td>
<select name="fund_id[]" >
<option></option>
</select>
</td>
<td>
<input type="text" name="amount[]" id="amount_2" class="totalLineAmount">
</td>
</tr>
<tr>
<td><input class="case" type="checkbox"/></td>
<td><select name="account_id[]" class=" mySelect" id="type_3">
<option value="000"></option>
<option value="1">DR</option>
<option value="2">CR</option>
</select>
</td>
<td>
<input type="text" name="accountCode[]" id="accountCode_3">
</td>
<td>
<input type="text" name="accountName[]" id="accountName_3"></td>
<td>
<select name="fund_id[]" >
<option></option>
</select>
</td>
<td>
<input type="text" name="amount[]" id="amount_3" class="totalLineAmount">
</td>
</tr>
<tr>
<td><input class="case" type="checkbox"/></td>
<td><select name="account_id[]" class=" mySelect" id="type_4">
<option value="000"></option>
<option value="1">DR</option>
<option value="2">CR</option>
</select>
</td>
<td>
<input type="text" name="accountCode[]" id="accountCode_4">
</td>
<td>
<input type="text" name="accountName[]" id="accountName_4"></td>
<td>
<select name="fund_id[]" >
<option></option>
</select>
</td>
<td>
<input type="text" name="amount[]" id="amount_4" class="totalLineAmount">
</td>
</tr>
</tbody>
</table>
jQuery脚本
<script>
$(function(){
$(document).on("change",".mySelect",function(e){
e.preventDefault();
var _this=$(this);
var id =_this.val();
if ( id == 1) {
calculateTotalDebit();
}else if (id == 2) {
calculateTotalCredit();
}
function calculateTotalDebit(){
total = 0;
$('.totalLineAmount').each(function(){
if($(this).val() != '' )total += parseFloat( $(this).val() );
$('#totalDebit').val( total.toFixed(2) );
});
}
function calculateTotalCredit(){
total = 0;
$('.totalLineAmount').each(function(){
if($(this).val() != '' )total += parseFloat( $(this).val() );
});
$('#totalCredit').val( total.toFixed(2) );
}
});
});
</script>
$('.totalLineAmount')
选择所有金额输入,因此无论DR / CR类型如何, calculateTotalDebit
和calculateTotalCredit
函数都会将它们全部相加。 您可以检查函数内部的类型,例如, calculateTotalDebit
:
function calculateTotalDebit(){
var total = 0;
$('.totalLineAmount').each(function(){
var thisNumber = $(this).attr('id').slice(-1);
// select the type of this amount
var type = $('#type_' + thisNumber);
// add only if the type is DR (val == 1)
if($(this).val() != '' && type.val() == 1)total += parseFloat( $(this).val() );
$('#totalDebit').val( total.toFixed(2) );
});
$(function() { $(document).on("change", ".mySelect", function(e) { e.preventDefault(); var _this = $(this); var id = _this.val(); if (id == 1) { calculateTotalDebit(); } else if (id == 2) { calculateTotalCredit(); } function calculateTotalDebit() { total = 0; $('.totalLineAmount').each(function() { var thisNumber = $(this).attr('id').slice(-1); // select the type of this amount var type = $('#type_' + thisNumber); // add only if the type is DR (val == 1) if ($(this).val() != '' && type.val() == 1) total += parseFloat($(this).val()); $('#totalDebit').val(total.toFixed(2)); }); } function calculateTotalCredit() { total = 0; $('.totalLineAmount').each(function() { var thisNumber = $(this).attr('id').slice(-1); // select the type of this amount var type = $('#type_' + thisNumber); // add only if the type is CR (val == 2) if ($(this).val() != '' && type.val() == 2) total += parseFloat($(this).val()); }); $('#totalCredit').val(total.toFixed(2)); } }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div> <label style="margin-bottom:3px;">Debit Amount</label><span> <input type="text" name="total_debit" id="totalDebit"/></span> </div> <div> <label>Credit Amount</label><span> <input type="text" name="total_credit" id="totalCredit" /></span> </div> <table class="table-bordered table-hover"> <thead> <tr> <th width="2%"> <input id="check_all" type="checkbox" /> </th> <th width="5%">Type</th> <th width="5%">Account Code</th> <th width="15%">Account Name</th> <th width="10%">Fund</th> <th width="10%">Amount</th> </tr> </thead> <tbody> <tr> <td> <input class="case" type="checkbox" /> </td> <td> <select name="account_id[]" class=" mySelect" id="type_1"> <option value="000"></option> <option value="1">DR</option> <option value="2">CR</option> </select> </td> <td> <input type="text" name="accountCode[]" id="accountCode_1"> </td> <td> <input type="text" name="accountName[]" id="accountName_1"> </td> <td> <select name="fund_id[]"> <option></option> </select> </td> <td> <input type="text" name="amount[]" id="amount_1" class="totalLineAmount"> </td> </tr> <tr> <td> <input class="case" type="checkbox" /> </td> <td> <select name="account_id[]" class=" mySelect" id="type_2"> <option value="000"></option> <option value="1">DR</option> <option value="2">CR</option> </select> </td> <td> <input type="text" name="accountCode[]" id="accountCode_2"> </td> <td> <input type="text" name="accountName[]" id="accountName_2"> </td> <td> <select name="fund_id[]"> <option></option> </select> </td> <td> <input type="text" name="amount[]" id="amount_2" class="totalLineAmount"> </td> </tr> <tr> <td> <input class="case" type="checkbox" /> </td> <td> <select name="account_id[]" class=" mySelect" id="type_3"> <option value="000"></option> <option value="1">DR</option> <option value="2">CR</option> </select> </td> <td> <input type="text" name="accountCode[]" id="accountCode_3"> </td> <td> <input type="text" name="accountName[]" id="accountName_3"> </td> <td> <select name="fund_id[]"> <option></option> </select> </td> <td> <input type="text" name="amount[]" id="amount_3" class="totalLineAmount"> </td> </tr> <tr> <td> <input class="case" type="checkbox" /> </td> <td> <select name="account_id[]" class=" mySelect" id="type_4"> <option value="000"></option> <option value="1">DR</option> <option value="2">CR</option> </select> </td> <td> <input type="text" name="accountCode[]" id="accountCode_4"> </td> <td> <input type="text" name="accountName[]" id="accountName_4"> </td> <td> <select name="fund_id[]"> <option></option> </select> </td> <td> <input type="text" name="amount[]" id="amount_4" class="totalLineAmount"> </td> </tr> </tbody> </table>
我猜您必须同时更新“借方金额”和“贷方金额”框,因此您必须每次都调用这两个函数。 最好将两个函数合并为一个calculateAmounts
函数。 我还将事件侦听器添加到.totalLineAmount
框中,以自动更新总数。
尝试使用以下代码( demo ):
$(function() {
function calculateTotals() {
var DRTotal = 0,
CRTotal = 0;
$('.totalLineAmount').each(function() {
var $this = $(this),
val = $this.val() || 0,
type = $this.closest('tr').find('.mySelect').val();
if (val && type === "1") {
DRTotal += parseFloat(val);
} else if (val && type === "2") {
CRTotal += parseFloat(val);
}
});
$('#totalDebit').val(DRTotal.toFixed(2));
$('#totalCredit').val(CRTotal.toFixed(2));
}
$(document).on("change", ".mySelect, .totalLineAmount", function(e) {
e.preventDefault();
calculateTotals();
});
});
我认为,您应该在每个输入上添加事件监听器,计算并在回调函数中将适当的数据放入总量中,例如
$('.myInputClass').on('change', function() {
// your code here..
updateAmountField(amount);
});
function updateAmountField(amount) {
$('.myTotalAmountInput').value(amount);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.