我很难确定我的代码有什么问题
function NavCode() {
if ((event.keyCode > 31 && event.keyCode < 48) || (event.keyCode > 57 && event.keyCode < 65)|| (event.keyCode > 90 && event.keyCode < 97)|| (event.keyCode > 122 && event.keyCode < 164)||(event.keyCode > 166) )
event.returnValue = false;
return false;
}
我的目标是仅允许0-9个数字A-Za-z字母和仅限特殊字符 我在实施0-9-A-ZazñÑ
时已经成功了使用此代码
function NavCode() {
if ((event.keyCode > 31 && event.keyCode < 48) || (event.keyCode > 57 && event.keyCode < 65)|| (event.keyCode > 90 && event.keyCode < 97)|| (event.keyCode > 122 && event.keyCode < 164))
event.returnValue = false;
return false;
}
这个问题在于它也可以提供高于165的ascii字符,例如。 ªº¿
但是当我添加||(event.keyCode > 166)
时,特殊字符的工作没有任何效果可以帮助我只允许
的 0-9-A-ZazñÑ?我真的很难调试java脚本,因为我是这个
谢谢。
答案 0 :(得分:2)
{
上缺少花括号(}
和if
),因此return false;
行总是在执行,因为if
没有卷曲大括号只有条件地执行下一行。
试试这个:
function NavCode() {
if ((event.keyCode > 31 && event.keyCode < 48) ||
(event.keyCode > 57 && event.keyCode < 65)||
(event.keyCode > 90 && event.keyCode < 97)||
(event.keyCode > 122 && event.keyCode < 164)) {
event.returnValue = false;
return false;
}
}
现在return false;
仅在if
条件为true
时才会执行。
答案 1 :(得分:1)
假设event.keyCode是一个unicode值,你可以这样做:
if (String.fromCharCode(event.keyCode).match(/[^0-9A-Za-zñÑ]/)) {
event.returnValue = false;
return false;
}
它首先将event.keyCode转换为字符串(如果您有权访问该字符,请使用该字符),然后使用正则表达式进行否定匹配(^
作为第一个字符范围使其成为否定的匹配)
使用正则表达式而不是检查event.keyCode的值有点慢,但在我看来它更具可读性。除非您的代码在紧密循环中运行并且每秒处理兆字节数据,否则它应该不是问题。
答案 2 :(得分:0)
你缺少if条件的大括号,这是问题的主要原因,如果你没有应用花括号,那么语句的右括号后面的语句只出现在'then'部分无论if中的条件是否满足,都会执行if-then-else语句和所有其他语句。