Простой Javascript Onblur Если еще функция - PullRequest
0 голосов
/ 23 января 2012

Это моя первая неделя, изучающая яваскрипт, и я столкнулся с проблемой.

Я пытаюсь создать простой ипотечный калькулятор кредитования. Мой калькулятор работает нормально, но я пытаюсь настроить проверку минимального значения для одного из двух полей формы.

Вот ссылка на страницу

Ссылка

Мой код ниже

function calculate (form) {
    var propVal = form.propertyValue.value; var loanAmt =
    form.mortgageAmount.value; var type = form.mortgageType.value;

    var ltv = loanAmt / propVal * 100 ;

    var roundedLtv = Math.floor(ltv);

    if ( type === "First Time Buyer" && roundedLtv <= 91 )  {   
        document.getElementById("result").innerHTML= ("Your loan to value is: <b>" + (roundedLtv) + "%</b> <br /> We can help place your mortgage");
    }
    else if ( type === "Moving Home" && roundedLtv <= 91 )  {   
        document.getElementById("result").innerHTML= ("Your loan to value is: <b>" + (roundedLtv) + "%</b> <br /> We can help place your mortgage");
    }
    else if ( type === "Remortgage" && roundedLtv <= 86 )  {    
        document.getElementById("result").innerHTML= ("Your loan to value is: <b>" + (roundedLtv) + "%</b> <br /> We can help place your mortgage");
    }
    else if ( type === "Buy To Let Purchase" && roundedLtv <= 81 )  {   
        document.getElementById("result").innerHTML= ("Your loan to value is: <b>" + (roundedLtv) + "%</b> <br /> We can help place your mortgage");
    }
    else if ( type === "Buy To Let Remortgage" && roundedLtv <= 76 )  {     
        document.getElementById("result").innerHTML= ("Your loan to value is: <b>" + (roundedLtv) + "%</b> <br /> We can help place your mortgage");   
    }
    else 
    {       
        document.getElementById("result").innerHTML= ("Your loan to value is: <b>" + (roundedLtv) + "%</b> <br /> Unfortunatly we cannot help you place a mortgage");    
    }
}

Все работает нормально до этого момента, когда я пытаюсь предупредить пользователя о том, что сумма кредита должна быть больше 45000. Ниже в HTML вы увидите, что я пытаюсь использовать функцию onBlur

function loancheck (propVal,loanAmt,form) {      
    if (loanAmt >= 45000) {
        document.getElementById("val1").innerHTML= ("Thank You"); 
    }
    else   
    {       
         document.getElementById("val1").innerHTML= ("Higher");   
    }
} 

Это HTML, чтобы пойти с ним

<form name="myform" ACTION="" METHOD="GET"> Mortgage Type 
    <select name="mortgageType"> 
        <option>First Time Buyer</option> 
        <option>Moving Home</option> 
        <option>Remortgage</option> 
        <option>Buy To Let Purchase</option> 
        <option>Buy To Let Remortgage</option> 
     </select> 

     <br /> 
     Value <input name="propertyValue" type="text" value=""/><br />

     Mortgage Amount <input name="mortgageAmount" type="text" value="" onBlur="loancheck(this.value)" />

     <p id="val1"></p>

     <INPUT TYPE="button" NAME="button" Value="Click" onClick="calculate(this.form)">
</form> 

<br /><br /> 
<p id="result"> </p>

Я уверен, что я делаю что-то в корне неправильно, но если бы кто-то мог указать мне на это, я был бы очень благодарен.

Ответы [ 4 ]

1 голос
/ 23 января 2012

Когда вызывается loancheck, переменная loanAmt не определена, поскольку в функцию передано недостаточно параметров.Попробуйте очистить определение функции следующим образом:

function loancheck (loanAmt) { // remove unused parameters
    var userAlert = document.getElementById("val1") // don't repeat yourself
    if (loanAmt >= 45000) { 
        userAlert.innerHTML= "Thank You"; // remove extraneous parens
    } else { 
        userAlert.innerHTML= "Higher";
    }
}
0 голосов
/ 23 января 2012

Вы не сказали, что на самом деле происходит :) Но я вижу, что ваша функция loancheck принимает 3 переменные. Ваш обработчик onblur передает одну переменную, но ваша функция ожидает, что вторая переменная "loanAmt" будет там. Имеет смысл?

0 голосов
/ 23 января 2012

Вы вызываете loancheck (this.value) в onBlur

Но у вашего определения функции есть loancheck (propVal, loanAmt, form).

Вы передаете одно значение, которое получает копии в proVal.

loadnAmt, форма не определена.

0 голосов
/ 23 января 2012

Когда вы звоните loancheck, вы делаете это:

loancheck(this.value)

Однако loancheck принимает три параметра:

function loancheck (propVal,loanAmt,form) 

Так как loanAmt является частной переменной в функции calculate, вам нужно сначала вызвать метод вычисления, а затем вернуть loanAmt. Или сделайте loanAmt глобальной переменной и обновляйте ее всякий раз, когда пользователь изменяет соответствующее поле.

...