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

07-24 17:06