“Javascript - The Definitive Guide”一书中的一个例子不起作用

时间:2011-12-17 23:56:27

标签: javascript

我正在阅读 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>

1 个答案:

答案 0 :(得分:4)

我注意到的第一件事是你错过了一个括号:

if (!isNaN(monthly) && (monthly != Number.POSITIVE_INFINITY) && (monthly != Number.NEGATIVE_INFINITY) *)* {

我发现JSLint帮助我解决了这些语法错误。如果您使用的是IDE,则可以使用一些集成工具来使JSLint与它们一起使用。

Jared也间接提出了另一个网站JSFiddle,它可用于调试HTML + CSS + JS。