2016-02-05 117 views
-2

簡單的程序將計算週期性利率,然而該函數是在按鈕中定義和調用的,但仍未顯示的未捕獲參考值仍然存在錯誤。很多的幫助表示讚賞未捕獲的參考誤差函數未定義Javascript

function calculatePayment(){ 
     var loanAmount = document.getElementById("txtLoanAmount").value; 
     var interestRate = document.getElementById("txtInterestRate").value; 
     var amortiPeriod = document.getElementById("txtYearlyPeriod").value; 
     var totalPayment; 
     var numOfMonths; 

     //Convert strings from text box to integers 
     loanAmount = parseInt(loanAmount); 
     interestRate = parseInt(interestRate); 
     amortiPeriod = parseInt(amortiPeriod); 
     //Validate the input boxes to ensure values were added and follow application rules 
     if (loanAmount == null || loanAmount == ""){ 
      //alert("You must enter a loan amount"); 
      message = "You must enter a loan Amount"; 
      document.getElementById("errorMessage").innerHTML = message; 
     }else if (interestRate == null || interestRate == ""){ 
      //alert("You must enter a interest rate"); 
      message = "You must enter an interest rate"; 
      document.getElementById("errorMessage").innerHTML = message; 
     }else if (amortiPerid == null || amortiPeriod == ""){ 
      //alert("You must enter an interest rate"); 
      message = "You must enter an interest rate"; 
      document.getElementById("errorMessage").innerHTML = message; 
     }else if isNaN(loanAmount || interestRate || amortiPeriod){ 
      message = "The values you enter must be numeric"; 
      document.getElementById("errorMessage").innerHTML = message; 
     }else{ 
      numOfMonths = amortiPeriod * 12; 
      paymentRate = loanAmount * interestRate/100; 
      totalPayment = paymentRate * numOfMonths; 
      message = totalPayment; 
      document.getElementById("errorMessage").innerHTML = message; 
     } 

    } 

下面是HTML:

<tr> 
       <td><input type="button" onClick="calculatePayment()" name="btnCalculate" value="Calculate Payment"/></td><td><input type="button" name="btnClear" value="Clear"/></td> 
      </tr> 
+0

請添加您的HTML部分 –

+0

*其中*是定義的函數嗎?如果它在全局範圍內不可用,那麼DOM不能在'onclick'中運行它。你可以在函數def後添加:'window.calculatePayment = calculatePayment'。 –

+0

我發現錯誤,就像'}否則,如果isNaN(...)其中括號完全缺失 – adeneo

回答

2

意想不到的標識:

} else if isNaN(loanAmount || interestRate || amortiPeriod) { 

有了這個標記(因爲你提供小於需要)

<input id="calcme" type="button" name="btnCalculate" value="Calculate Payment" /> 
<input type="button" name="btnClear" value="Clear" /> 
<input type="text" id="txtInterestRate" value="10">int 
<input type="text" id="txtLoanAmount" value="1200">amt 
<input type="text" id="txtYearlyPeriod" value="1"> years per 
<div id="errorMessage"> 
    errors 
</div> 

您需要修改這部分工作的代碼來解決你的實際問題在這裏:

function showError(message) { 
    document.getElementById("errorMessage").innerHTML = message; 
} 

function showLoanAmount(amount) { 
    document.getElementById("txtLoanAmount").value = amount; 
} 

function showInterestRate(rate) { 
    document.getElementById("txtInterestRate").value = rate; 
} 

function showYearlyPeriod(period) { 
    document.getElementById("txtLoanAmount").value = period; 
} 

function getLoanAmount() { 
    return parseInt(document.getElementById("txtLoanAmount").value); 
} 

function getInterestRate() { 
    return parseInt(document.getElementById("txtInterestRate").value); 
} 

function getYearlyPeriod() { 
    return parseInt(document.getElementById("txtLoanAmount").value); 
} 

function calculatePayment() { 
    // get values 
    var loanAmount = getLoanAmount(); 
    var interestRate = getInterestRate(); 
    var amortiPeriod = getYearlyPeriod(); 
    var totalPayment; 
    var numOfMonths; 
    var message = ""; 

    //set values 
    showLoanAmount(loanAmount); 
    showInterestRate(interestRate); 
    showYearlyPeriod(amortiPeriod); 
    //Validate the input boxes to ensure values were added and follow application rules 
    if (!loanAmount) { 
    message = "You must enter a loan Amount"; 
    showError(message); 
    } 
    if (!interestRate) { 
    message = "You must enter an interest rate"; 
    showError(message); 
    } 
    if (!amortiPeriod) { 
    message = "You must enter an interest rate"; 
    showError(message); 
    } 
    if (isNaN(loanAmount) || isNaN(interestRate) || isNaN(amortiPeriod)) { 
    message = "The values you enter must be numeric"; 
    showError(message); 
    } 
    // crappy math here 
    numOfMonths = amortiPeriod * 12; 
    paymentRate = loanAmount * interestRate/100; 
    totalPayment = paymentRate * numOfMonths; 
    message = totalPayment; 
    showError(message); 

} 
var el = document.getElementById("calcme"); 
el.addEventListener("click", calculatePayment, false); 
0

你必須與你的代碼的幾個問題:

else if isNaN(loanAmount || interestRate || amortiPeriod) 

應該檢查每個變量,以確定它是否是不是一個數字,例如:isNaN(loanAmount) || isNaN(interestRate) || isNaN(amortiPeriod)

作爲一個例子: https://jsfiddle.net/zpep0t1q/1/

同樣在此線有一個錯字:

} else if (amortiPerid == null || amortiPeriod == ""){ 

amortiPerid不是amortiPeriod