目前您正在进行测试
(a < 48) || (a > 57)
对于无效值。所以我会改变这些:
(a < 0 ) || (a > 255)
您可能还需要考虑如何处理像 2.3 这样的非整数输入 - 要么将其四舍五入,要么将其视为无效。
目前,正如 Kelvin Mackay 指出的那样,您正在对按键事件而不是输入值执行验证,因此将 onkeypress 更改为allownums(this.value)
.
我建议将警报更改为 div 中的警告,并使用验证来启用/禁用提交按钮,因为弹出窗口在几乎所有情况下都非常烦人。
当输入无效时清除输入(按照评论中的要求)会让用户感到相当烦人;一旦按下某个键添加一个数字并使输入无效,整个输入就会被清除。然而,代码是:
if(!validnum(this.value))
this.value="";
在输入标签中,因此:
<input type='text' id='numonly'
onkeyup='if(!validnum(this.value)) this.value="";'>
函数改为:
function validnum(a) {
if(a < 0 || a > 255)
return false;
else
return true;
}
或者更简洁地说:
function validnum(a) {
return ((a >= 0) && (a <= 255));
}
编辑:要警告并清除该框,如果您必须:
function validOrPunchTheUser(inputElement) {
if(!validnum(inputElement.value)) {
window.alert('badness'); // punch the user
inputElement.value = ""; // take away their things
}
}
<input type='text' id='numonly'
onkeyup='validOrPunchTheUser(this)'>
然而,阅读其他答案,显然您正在寻求验证一个八位字节(例如在 IP 地址中)。如果是这样,请在问题中说明这一点,因为它今天经过了我。对于一个八位字节:
function validateIPKeyPress(event) {
var key = event.keyCode;
var currentvalue = event.target.value;
if(key < 96 || key > 105)
{
event.preventDefault();
window.alert('pain');
return false;
}
else if(currentvalue.length > 2 ||
(currentvalue.length == 2 &&
key > 101)) {
window.alert('of death');
event.preventDefault();
event.target.value = event.target.value.substring(0,2);
}
else
return true;
}
使用输入标签:
<input type='text' id='octet'
onkeydown='validateIPKeyPress(event)'>
除非请不要使用警报。如果您删除警报线,它将默默地阻止无效输入。请注意现在使用 onkeydown 的更改,以便我们可以捕获无效的按键并完全防止值发生更改。如果必须清除输入,请执行以下操作if(!validateIPKeyPress(event)) this.value = "";
.