我正在阅读Javascript-权威指南。我通常会尝试模仿他们提供的示例,以便我可以更快地学习,这就是我的学习方式。但是我重写了这个Javascript,它似乎没有用。每当我输入数字并点击计算时,它就不会计算。
我已经尝试过在其他地方寻找答案,但一无所获。
<html>
<body>
<head><title>Factorials</title></head>
<form name="loandata">
<table>
<tr>
<td colspan="3"><b>Enter Loan Information:</b></td>
</tr>
<tr>
<td>1)</td>
<td>Amount of the loan (any currency):</td>
<td><input type="text" name="principal" size="12"
onchange="calculate();" /></td>
</tr>
<tr>
<td>2)</td>
<td>Annual percentage rate of interest:</td>
<td><input type="text" name="interest" size="12"
onchange="calculate();" /></td>
</tr>
<tr>
<td>3)</td>
<td>Repayment period in years:</td>
<td><input type="text" name="years" size="12"
onchange="calculate();" /></td>
</tr>
<tr>
<td colspan="3">
<input type="button" value="Compute" onclick="calculate();" />
</td>
</tr>
<tr>
<td colspan="3">
<b>Payment Information:</b>
</td>
</tr>
<tr>
<td>4)</td>
<td>Your monthly payment will be:</td>
<td><input type="text" name="payment" size="12" /></td>
</tr>
<tr>
<td>5)</td>
<td>Your total payment will be:</td>
<td><input type="text" name="total" size="12" /></td>
</tr>
<tr>
<td>6)</td>
<td>Your total interest payments will be:</td>
<td><input type="text" name="totalinterest" size="12" /></td>
</tr>
</table>
</form>
<script>
function calculate() {
// Get the user's input from the form. Assume it is all valid.
// Convert interest from a percentage to a decimal, and convert form
// an annual rate to a monthly rate. Convert payment period in years
// to the number of monthly payments.
var principal = document.loandata.principal.value;
var interest = document.loandata.interest.value / 100 / 12;
var payments = document.loandata.years.value * 12;
// Now compute the monthly payment figure, using esoteric math..
var x = Math.pow(1 + interest, payments);
var monthly = (principal*x*interest)/(x-1);
// Check that the result is a finite number. If so, display the results.
if (!isNaN(monthly) &&
(monthly != Number.POSITIVE_INFINITY) &&
(monthly != Number.NEGATIVE_INFINITY) {
document.loandata.payment.value = round(monthly);
document.loandata.total.value = round(monthly * payments);
document.loandata.totalinterest.value = round((monthly * payments) - principal);
}
// Otherwise, the user's input was probably invalid, so don't display anything.
else {
document.loandata.payment.value = "";
document.loandata.total.value = "";
document.loandata.totalinterest.value = "";
}
}
// This simple method rounds a number to two decimal places.
function round(x) {
return Math.round(x*100)/100;
}
</script>
</body>
</html>
最佳答案
我注意到的第一件事是您缺少括号:if (!isNaN(monthly) && (monthly != Number.POSITIVE_INFINITY) && (monthly != Number.NEGATIVE_INFINITY) *)* {
我发现JSLint可以帮助我解决这类语法错误。如果使用的是IDE,则可以使用一些集成工具来使JSLint与它们一起使用。
Jared还间接提到了另一个网站JSFiddle,该网站可用于调试HTML + CSS + JS。