我很难确定我的代码出了什么问题
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ññnio
使用此代码
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;
}
这个的问题是它也将ascii字符降到165以上,例如ªº¿
但是当我添加||(event.keyCode > 166)
时,特殊字符上的任何内容都不起作用,你能帮我只允许
0-9-A-Zazñnio??我真的很难调试java脚本,因为我是这个的新手
谢谢。
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;
}
}
现在,只有当if
条件为true
时,才会执行return false;
。
假设event.keyCode是unicode值,您可以执行以下操作:
if (String.fromCharCode(event.keyCode).match(/[^0-9A-Za-zñÑ]/)) {
event.returnValue = false;
return false;
}
它首先将event.keyCode转换为字符串(如果您可以访问该字符,请使用该字符串),然后使用正则表达式进行否定匹配(^
作为范围中的第一个字符使其成为否定匹配)
使用regexp而不是检查event.keyCode的值有点慢,但在我看来它更可读。除非您的代码运行在一个紧密的循环中,并且每秒处理兆字节的数据,否则这应该不是问题。
if条件缺少大括号,这是问题的主要原因,如果没有应用大括号,则条件的右括号后面的语句只出现在if-then-else语句的'then'部分,并且无论是否满足if中的条件,每次都执行所有其他语句。