我正在尝试验证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”时,它仍然会提交表格,例如。谢谢!
答案 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