祝福所有人。我有以下函数来验证输入,具体取决于数字,字母,字母数字和电子邮件:
function permite(e, permitidos) {
var key = e.keyCode || e.which;
//Validate if its an arrow or delete button
if((key == 46) || (key == 8) || (key >= 37 && key <= 40))
return true;
var keychar = String.fromCharCode(key);
switch(permitidos) {
case 'num':
permitidos = /^[0-9]$/;
break;
case 'car':
permitidos = /^[\sa-zA-Z]$/;
break;
case 'num_car':
permitidos = /^[\sa-zA-Z0-9]$/;
break;
case 'correo':
permitidos = /^[a-zA-Z0-9._\-+@]$/;
break;
}
return permitidos.test(keychar);
}
var名称是西班牙语,但它很容易理解。
问题如下。 '%'的键码与左箭头相同37,而'('的键码与右箭头相同。所以我的功能是不验证'%'和'('而且很糟糕。我不知道该怎么做,请帮忙。
答案 0 :(得分:1)
Darn you FireFox!keypress
事件不会触发箭头和删除键,因此您只需删除if
语句。
您正在混淆keyCode
和charCode
,这是可以理解的,因为event.keyCode
实际上包含charCode
keyPress
个事件,与keydown
不同keyup
。 (
的keyCode为57(与9
相同 - 这些字符位于同一个键上)。它的charCode是40.箭头键没有charCodes,因此它们不会触发keypress
个事件。 (FireFox除外......唉!)
您最好的选择是使用keydown
事件并查找keyCode
而非charCode
,并在必要时检查shift键。当按下shift键时,您必须手动将keyCodes映射到字符。
答案 1 :(得分:0)
稍微OT(道歉),但您可能想要查看其中一个Javascript库,例如JQuery;几乎所有这些都带有(或有)用于“验证输入”的库。
例如:如果您使用的是JQuery,可以考虑使用“验证”插件 - http://bassistance.de/jquery-plugins/jquery-plugin-validation/
答案 2 :(得分:0)
//Validate if its an arrow or delete button
if((key == 46) || (key == 8) || (key >= 37 && key <= 40 && !e.shiftKey))
return true;
另一个选项(取决于您的应用)是处理keydown
事件而不是keypress
事件,这不会导致密钥代码重叠。