我试图将文本字段中的键盘输入限制为仅数字[0-9]
和减号-
(无复制/粘贴等)和删除键。
该代码仅适用于数字和删除键,但不适用于减号-
部分。
用户只能在其号码前面输入减号-
,如果他们尝试输入1
,则-
不应输入-
,但现在输入-
部分根本不起作用。
小提琴:http://jsfiddle.net/7XLqQ/1/
我认为这段代码是问题,但看起来不错。它检查文本输入是否为空白,如果是,则输入减号-
。
// Only enter the minus sign (-) if the user enters it first
if (unicode == 45 && input.value == "") {
return true;
}
我的完整代码:
<input type="text" maxlength="10" id="myInput">
<script>
var input = document.getElementById("myInput");
input.onkeypress = function(e) {
var unicode = e.keyCode;
if (unicode == 49 || unicode == 50 || unicode == 51 || unicode == 52 || unicode == 53 || unicode == 54 || unicode == 55 || unicode == 56 || unicode == 57 || unicode == 48) {
return true;
} else {
return false;
}
// Only enter the minus sign (-) if the user enters it first
if (unicode == 45 && input.value == "") {
return true;
}
};
</script>
我建议:
var input = document.getElementById("myInput");
input.onkeypress = function(e) {
switch (e.keyCode){
case 45:
return this.value.length == 0 ? true : false;
break;
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
return true;
break;
default:
return false;
break;
}
};
您的原始代码失败的原因很简单,就是您可以在评估if
条件之前从函数中返回。在此版本中,如果按下-
键,则三元返回,如果没有当前值(那么true
将是第一个字符),则返回-
;如果已经有一个值,则返回false
(因此, -
将不是第一个字符。
操作顺序,在您询问减号之前,您在0-9上返回false。如果将块减号移动到0-9(如果块且您是黄金)的上方]
<input type="text" maxlength="10" id="myInput">
<script>
var input = document.getElementById("myInput");
input.onkeypress = function(e) {
var unicode = e.keyCode;
// Only enter the minus sign (-) if the user enters it first
if (unicode == 45 && input.value == "") {
return true;
}
if (unicode == 49 || unicode == 50 || unicode == 51 || unicode == 52 || unicode == 53 || unicode == 54 || unicode == 55 || unicode == 56 || unicode == 57 || unicode == 48) {
return true;
} else {
return false;
}
};
</script>
keyCode
是除IE以外的所有浏览器中的错误属性。在其他浏览器中需要charCode
或which
。使用此方法,您将获得字符代码,并且可以使用正则表达式测试键入的字符。您还需要允许在浏览器中触发不可打印的按键,例如删除,退格键和箭头键,这些按键会触发此类键的keypress
事件。