2016-04-09 40 views
0

Bir Poperty değeri ve aşağı ödemeyi doğrulamaya çalışıyorum. Pozitif - - tam sayı en az 65.000 dolar daha olmalı o peşinatişlevinde yanlış hata iletisi çıkışı

sayısal olmalı mevcut olmalı:

özellik değerini: koşullar aşağıdaki gibidir. - Pozitif - tamsayı özelliğinin değerinin en az% 20 (propValue) olmalı

Benim fonksiyonudur (çeşit)

sayısal olmalı mevcut olmalı: Ödeme aşağı

Çalışma. Tüm doğrulama testlerini geçmez. Birisi bana bunu nasıl geliştirebileceğine dair doğru yönde yönlendirebilirse, büyük takdir edilecektir. Aşağı ücret ve değeri için My 2 işlevleri:

function propValueValidation(errMessages){ 

var propValueLength = document.mortgage.propValue.value.length; 

var propValueNumber = isNaN(document.mortgage.propValue.value); 

var propValue = document.mortgage.propValue.value; 

var downPayPlus = document.mortgage.downPay.value + 65000; 

if (!propValueLength) { 
    errMessages += " Property Value is a required field"; 
    return errMessages; 
} 
    else if (typeof propValue === 'number') { 
     var remainder = (propValue % 1); 
     if(remainder != 0){ 
      errMessages += "Property Value must be a positive whole number"; 
      return errMessages; 
     } 
    } 
    else if (propValue < downPayPlus){ 
     errMessages += "Property Value must be at least 65,000 greater than the down payment"; 
     return errMessages; 

    } 
    return errMessages; 
} 

//validate down pay 

function downPayValidation(errMessages){ 

var downPayLength = document.mortgage.downPay.value.length; 

var downPay = document.mortgage.downPay.value; 

var propValueMin = document.mortgage.propValue.value * 0.2; 

if (!downPayLength) { 
    errMessages += "Down Payment is a required field"; 
    return errMessages; 
} 
    else if (typeof downPay === 'number') { 
     var remainder = (downPay % 1); 
     if(remainder != 0){ 
     errMessages += "Down Payment must be a positive whole number"; 
     return errMessages; 
     } 
    } 
    else if (downPay < propValueMin){ 
     errMessages +="Down Payment must be at least 20% of the property value"; 
     return errMessages; 

    } 

    return errMessages; 
} 

HTML:

downpay "1nn1" dir
<label class="label">Property Value </label>  
     <input type="text" name="propValue" id="propValue" size="7" maxlength="6" > 

     <br> 

    <label class="label">Down Payment </label>  
     <input type="text" name="downPay" id="downPay" size="7" maxlength="6" > 

hala örneğin formu gönderecektir. Teşekkürler!

+1

'document.mortgage.propValue.value' bir dize değil, bir sayıdır:

İşte yapılan bazı değişiklikler ile ilk işlevin kodudur. – Xufox

+0

Bu işlevleri çağırdığınız kod nerede? Herhangi bir yerde 'propValueNumber' değerini kullanmadığınızı fark ettiniz mi? Bir "string" değerinin sayısal olup olmadığını kontrol etmek için "isNaN" fonksiyonunun _not_ olduğunu biliyor musunuz? – JLRishe

cevap

0

Bir numarayı onaylamak için parseInt() öğesini kullanabilirsiniz.

var tempVal = document.mortgage.propValue.value; 
var propValue = parseInt(tempVal); // this will try to extract an integer from tempVal 

if (tempVal != propValue.toString()) // if true, there were non-number chars or value is NaN 
{ 
    errMessages += "Bad value, please enter an integer"; 
} 
0

Sen (giriş değerleridir) dize değerleri üzerinde isNaN kullanmamalısınız. Bunun yerine ilk (parseFloat veya parseInt bir sayı ile başlamak dizeleri kabul ederken, sayı olarak ayrıştırmak için giriş bütününü gerektirecektir veya parseFloat fakat Number) Number() ile numaraya böyle bir dizeyi dönüştürmek. Ardından bunun için isNaN'u arayın. (Giriş elemanlarının value özelliği her zaman bir dize, çünkü asla) sayısal veriler için bir dala sahiptir çünkü

, ayrıca if else mantığı ile bir sorun var ve bu konuda bir else karşılaştırmak Başka bir miktar ile miktar. Yine de bu son test için değer sayısal olmalıdır. Yani bu test yanlış yerde.

function propValueValidation(errMessages){ 
    var propValue = document.mortgage.propValue.value; 
    var propValueNumber = Number(propValue); 
    var downPayPlus = propValueNumber + 65000; 
    var genericMsg = ' property value was provided. Please provide a positive' + 
       ' whole number, at least 65,000 greater than the down payment.\n'; 
    if (!propValue.length) { 
     errMessages += 'No' + genericMsg; 
    } else if (isNaN(propValueNumber)) { 
     errMessages += 'A non-numerical' + genericMsg; 
    } else if (propValueNumber % 1) { 
     errMessages += 'A fractional' + genericMsg; 
    } else if (propValueNumber < downPayPlus){ 
     errMessages += 'A too small' + genericMsg; 
    } 
    return errMessages; 
}