大家问候。我具有以下功能来验证输入,具体取决于数字,字母,字母数字和电子邮件:
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名称是西类牙语,但其易于理解。
问题如下。 '%'的键码与左箭头相同,而'('的键码与右箭头相同,40。因此我的功能未验证'%'和'(',它很烂。我不知道该怎么办,请帮忙。
最佳答案
keypress
事件不会触发箭头和删除键,因此您只需删除if
语句即可。该死的FireFox!
您正在混合keyCode
和charCode
,这是可以理解的,因为event.keyCode
实际上包含charCode
事件的keyPress
,而不是keydown
和keyup
。 (
的keyCode为57(与9
相同-这些字符在同一键上)。它的charCode是40。箭头键没有charCodes,因此它们不会触发keypress
事件。 (在FireFox中……除外!)
最好的选择是使用keydown
事件并查找keyCode
而不是charCode
,并在必要时检查Shift键。按下Shift键时,您必须手动将keyCode映射到字符。
关于javascript - 在JavaScript上验证 '%'和 '(',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5994445/