[英]js - how to output values from function into HTML table
我创建了一个计算器,以显示贷款期限内的还款额。
我已经设法计算出每个月的还款,利息,剩余贷款,但是我试图将其输出到表格中。 列将是固定数目(5),但行应根据月数动态更新。
我看过几篇类似的文章,但无法使其适用于我的代码。
下面和jsfiddle中的代码
HTML
<div class="mortgageInput">
<form method="POST" name="calc" onclick="validateForm();repayment();return false;">
<label>Amount </label>
<input type="textbox" id="loan" value="100000"><br>
<label>Years</label>
<input type="textbox" id="years" value="15"><br>
<label>Rate (%)</label>
<input type="textbox" id="rate" value="6.00" onkeyup="calculate"><br>
<input type="button" value="Calculate" id="btn"><br>
<label>Monthly Repayment</label>
<input type="textbox" id="monthlyRepayment"><br>
<label>Monthly Interest Only</label>
<input type="textbox" id="interest"><br>
<label>Monthly Capital Repayment</label>
<input type="textbox" id="capitalRepayment"><br>
<label>Total Interest</label>
<input type="textbox" id="totalInterest">
</form>
</div>
<br>
Output into table...<p id="demo"></p>
JS
(document).on("keyup", calculate());
function validateForm(){
var validation = true;
validation &= calculate();
validation &= pmt();
return validation;
}
function calculate() {
var p = document.querySelector("#loan").value;
var y = document.querySelector("#years").value;
var rate = document.querySelector("#rate").value;
var r = rate / 100 / 12;
var n = y * 12;
var I = (p * r);
var monthlyPayment = -pmt(r,n,p);
var mr = (monthlyPayment - I);
var ti = (monthlyPayment) * n - p;
var list = JSON.stringify((computeSchedule(p, rate, 12, y, monthlyPayment)), 0, 4);
document.querySelector("#interest").value = I.toFixed(2);
document.querySelector("#totalInterest").value = ti.toFixed(2);
document.querySelector("#capitalRepayment").value = mr.toFixed(2);
document.querySelector("#monthlyRepayment").value = monthlyPayment.toFixed(2);
document.getElementById("demo").innerHTML = list;
}
function pmt(rate,nper,pv) {
var pvif, pmt;
pvif = Math.pow( 1 + rate, nper);
pmt = rate / (pvif - 1) * -(pv * pvif);
return pmt;
}
function computeSchedule(loan_amount, interest_rate, payments_per_year, years, payment) {
var schedule = [];
var remaining = loan_amount;
var number_of_payments = payments_per_year * years;
for (var i=0; i<=number_of_payments; i++) {
var interest = remaining * (interest_rate/100/payments_per_year);
var principle = (payment-interest);
var row = [i, payment, interest>0?interest:0, principle>0?principle:0, remaining>0?remaining:0];
schedule.push(row);
remaining -= principle
}
return schedule;
}
上面的答案是正确的,但是如果您对性能有顾虑,请在循环外插入html
var list = computeSchedule(p, rate, 12, y, monthlyPayment);
var tables = "";
for (var i = 0; i < list.length; i++) {
tables += "<tr>" +
"<td>" + list[i][0] + "</td>" +
"<td>" + list[i][1] + "</td>" +
"<td>" + list[i][2] + "</td>" +
"<td>" + list[i][3] + "</td>" +
"<td>" + list[i][4] + "</td>" +
"</tr>";
}
document.getElementById("demo").innerHTML = '<table>' + tables + '</table>';
我不确定我是否理解正确,但这通常是解决方案。 您正在弄弄一些js错误,在此示例中我没有修复它们。
function validateForm(){ var validation = true; validation &= calculate(); validation &= pmt(); return validation; } function calculate() { var p = document.querySelector("#loan").value; var y = document.querySelector("#years").value; var rate = document.querySelector("#rate").value; var r = rate / 100 / 12; var n = y * 12; var I = (p * r); var monthlyPayment = -pmt(r,n,p); var mr = (monthlyPayment - I); var ti = (monthlyPayment) * n - p; var list = JSON.stringify((computeSchedule(p, rate, 12, y, monthlyPayment)), 0, 4); document.querySelector("#interest").value = I.toFixed(2); document.querySelector("#totalInterest").value = ti.toFixed(2); document.querySelector("#capitalRepayment").value = mr.toFixed(2); document.querySelector("#monthlyRepayment").value = monthlyPayment.toFixed(2); var list = computeSchedule(p, rate, 12, y, monthlyPayment); console.log(list.length); for (var i=0; i < list.length; i++) { document.getElementById("test").innerHTML += "<tr><td>" + list[i][0] + "</td><td>" + list[i][1] + "</td><td>" + list[i][2] + "</td><td>" + list[i][3] + "</td><td>" + list[i][4] + "</td></tr>"; } } function pmt(rate,nper,pv) { var pvif, pmt; pvif = Math.pow( 1 + rate, nper); pmt = rate / (pvif - 1) * -(pv * pvif); return pmt; } function computeSchedule(loan_amount, interest_rate, payments_per_year, years, payment) { var schedule = []; var remaining = loan_amount; var number_of_payments = payments_per_year * years; for (var i=0; i<=number_of_payments; i++) { var interest = remaining * (interest_rate/100/payments_per_year); var principle = (payment-interest); var row = [i, payment, interest>0?interest:0, principle>0?principle:0, remaining>0?remaining:0]; schedule.push(row); remaining -= principle } return schedule; }
table { border-spacing: 0; } table td { border: 1px solid #666; padding: 0 3px; }
<div class="mortgageInput"> <form method="POST" name="calc" onclick="validateForm();repayment();return false;"> <label>Amount </label> <input type="textbox" id="loan" value="100000"><br> <label>Years</label> <input type="textbox" id="years" value="15"><br> <label>Rate (%)</label> <input type="textbox" id="rate" value="6.00" onkeyup="calculate"><br> <input type="button" value="Calculate" id="btn"><br> <label>Monthly Repayment</label> <input type="textbox" id="monthlyRepayment"><br> <label>Monthly Interest Only</label> <input type="textbox" id="interest"><br> <label>Monthly Capital Repayment</label> <input type="textbox" id="capitalRepayment"><br> <label>Total Interest</label> <input type="textbox" id="totalInterest"> </form> </div> <br> <table id="test"> </table>
computeSchedule
的结果包含一个二维数组 。 您应该能够使用两个嵌套的for循环遍历它。 然后,您可以组成表格。
非常简单的示例如下所示:
var demoList = computeSchedule(p, rate, 12, y, monthlyPayment);
var table = "<table>";
for (var rowIndex=0; rowIndex <= n; rowIndex++) {
var row = "<tr><td>#" + rowIndex + "</td>";
for(var colIndex = 0; colIndex < 4; colIndex++) {
row += "<td>" + demoList[rowIndex][colIndex] + "</td>";
}
table += row + "</tr>";
}
document.getElementById("output").innerHTML = table + "</table>";
您也可以在此处尝试正式版: https : //fiddle.jshell.net/aua4g8e7/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.