我正在尝试在我的应用程序中使用此Javascript。
function validateQuantity(field)
{
var value = field.value; //get characters
//check that all characters are digits, ., -, or ""
for(var i=0; i < field.value.length; ++i)
{
var new_key = value.charAt(i); //cycle through characters
if(((new_key <= "0") || (new_key > "9")) &&
!(new_key == ""))
{
alert("Please enter number and greater than 0 only");
return false;
break;
}
return true;
}
}
我有一个输入按钮,如下所示
<input class="buttonToLink" type="submit" value="Update"
onclick="return validateQuantity(document.getElementById('quantity'))"/>
上面的代码成功地检查了所有字母表的输入,例如“abc”或字母和数字,例如“abcd123”为false。
但是,当我首先放入数字字符以及“123abc”等字母时,它会失败 - 它不会显示警告。
我对代码做了什么错误,如何解决?
答案 0 :(得分:2)
if (parseInt(new_Key) == new_Key) {
//valid
} else { // it will return NaN
//invalid
}
答案 1 :(得分:2)
function validateQuantity(field) {
if (!/^\d+$/.test(field.value)) { // is an integer
alert("Please enter number and greater than 0 only");
return false;
}
return true;
}
您的代码不起作用的原因是因为您在循环中有返回true语句。一旦它看到一个有效的整数,它将返回true并退出该函数,忽略它之后的任何内容。允许像“123abc”这样的字符串。
这可能是你想要的:
function validateQuantity(field)
{
var value = field.value; //get characters
//check that all characters are digits, ., -, or ""
for(var i=0; i < field.value.length; ++i)
{
var new_key = value.charAt(i); //cycle through characters
if(((new_key <= "0") || (new_key > "9")) &&
!(new_key == ""))
{
alert("Please enter number and greater than 0 only");
return false;
break;
}
}
return true;
}
答案 2 :(得分:1)
尝试将值解析为整数,并与原始值进行比较。
var isAllNumbers = (parseInt(field.value) == field.value);
也许使用jQuery选择器,并使用正则表达式来测试数字。
var isAllNumbers = $("#quantity").val().match(/\d+$/);