![](/img/trans.png)
[英]Getting value of multiple text inputs by class name and only returning value from the one that has value
[英]Getting multiple values from inputs and adding them based on their class name
我有这个现在有效的脚本,我想将贷款付款和总贷款价值相加,但将这两种类型分开。
我觉得我没有充分发挥 jQuery 的潜力,因为我复制和粘贴相同的东西两次,并用相似的代码重复我的自我。
我在这里错过了什么吗? 有没有更好的方法从多个输入字段中获取选定的值?
更新我犯了一个错误,让id
与<input />
值相同。 所以我更新了代码以使其类似。
$(document).ready(function() { getTotalAmount(); }); function getTotalAmount() { var monthTotal = 0.00; var total = 0.00; $('input.monthAmt').each(function() { monthTotal += parseFloat($(this).val()); console.log("These is something here: " + monthTotal + " "); }); $('input.loanAmt').each(function() { total += parseFloat($(this).val()); console.log("These is something here: " + total + " "); }); $('#monthAmt').text(monthTotal.toFixed(2).toString()); $('#loanAmt').text(total.toFixed(2).toString()); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> Loan 1: <label>Monthly Amount: </label> <input class="monthAmt" value="1" /> <label>Loan Amount: </label> <input class="loanAmt" value="2" /> </br> </br> Loan 2: <label>Loan Amount: </label> <input class="monthAmt" value="3" /> <label>Loan Amount: </label> <input class="loanAmt" value="4" /> </br> </br> <div id="totalMonthlyAmt">Total Monthly payments: $<span id="moAmt"></span></div> <div id="totalLoanAmt">Total Loan Amount: $<span id="lnAmt"></span></div>
如果我是你,我会为此使用 javascript,但你也可以使用 jQuery 来做到这一点。 您想要做的是将所有重复的代码放入一个函数中:
$(document).ready(function() { /* get total amount */ function addAmounts(els) { let result = 0; els.each((idx, el) => { result += parseInt($(el).val()) }) return result.toFixed(2) } $('#monthAmt').text(addAmounts($('input.monthAmt'))); $('#loanAmt').text(addAmounts($('input.loanAmt'))); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> Loan 1: <label>Monthly Amount: <input class="monthAmt" value="1" /> </label> <label>Loan Amount: <input class="loanAmt" value="2" /> </label> <br/> <br/> Loan 2: <label>Monthly Amount: <input class="monthAmt" value="3" /> </label> <label>Loan Amount: <input class="loanAmt" value="4" /> </label> <br/> <br/> <div id="totalMonthlyAmt">Total Monthly payments: $<span id="monthAmt"></span></div> <div id="totalLoanAmt">Total Loan Amount: $<span id="loanAmt"></span></div>
使用纯 javascript 和稍微简化的代码:
function addAmounts(selector){ return [...document.querySelectorAll(selector)].reduce((acc,cur) => acc += parseInt(cur.value), 0).toFixed(2) } document.getElementById("totalMonthlyAmt").innerHTML = "Total Monthly payments: " + addAmounts(".monthAmt") document.getElementById("totalLoanAmt").innerHTML = "Total Loan Amount: " + addAmounts(".loanAmt")
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> Loan 1: <label>Monthly Amount: <input class="monthAmt" value="1" /> </label> <label>Loan Amount: <input class="loanAmt" value="2" /> </label> <br/> <br/> Loan 2: <label>Monthly Amount: <input class="monthAmt" value="3" /> </label> <label>Loan Amount: <input class="loanAmt" value="4" /> </label> <br/> <br/> <div id="totalMonthlyAmt">Total Monthly payments: </div> <div id="totalLoanAmt">Total Loan Amount: </div>
考虑到您正在循环两种截然不同的数据(每月与总计),您的代码对我来说似乎并不重复。
这使得什么是重复的,可以接受。
但是如果你真的想进一步减少代码,你可以这样做:
function getTotalAmount() {
let totals = {loanAmt: 0, monthAmt: 0};
$('.monthAmt, .loanAmt').each(function() {
totals[$(this)[0].className] += parseFloat($(this).val());
});
for (type in totals)
$('#'+type).text(totals[type].toFixed(2).toString());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.