功能错误的错误信息输出

时间:2016-04-09 21:27:05

标签: javascript

我正在尝试验证Poperty值和预付款。条件如下:

属性值:

必须在场 必须是数字 - 正数 - 整数 必须至少比预付款多65,000美元。

首付:

必须在场 必须是数字 - 正数 - 整数 必须至少为属性值的20%(propValue)

我的功能是(有点)工作。它没有通过所有验证测试。如果有人能指出我正确的方向,如何改善这一点,将不胜感激。我的2个用于降低工资和价值的功能:

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:

<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" >

当付款是“1nn1”时,它仍然会提交表格,例如。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用parseInt()确认其编号。

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";
}

答案 1 :(得分:0)

您不应对字符串值使用isNaN(输入值是哪个)。相反,首先将此类字符串转换为包含Number()(或parseFloat的数字,但Number将需要将整个输入解析为数字,而parseFloat或{{1将接受带有数字的 start 的字符串。然后打电话给parseInt

isNaN逻辑也存在问题,因为你有一个数字数据分支(它永远不会得到它,因为输入元素的if else属性总是一个字符串),并且value就可以将金额与其他金额进行比较。然而,对于最后一次测试,该值必须是数字。所以测试是在错误的地方。

这是您的第一个函数代码,其中包含一些更改:

else