大家问候。我具有以下功能来验证输入,具体取决于数字,字母,字母数字和电子邮件:

  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!

您正在混合keyCodecharCode,这是可以理解的,因为event.keyCode实际上包含charCode事件的keyPress,而不是keydownkeyup(的keyCode为57(与9相同-这些字符在同一键上)。它的charCode是40。箭头键没有charCodes,因此它们不会触发keypress事件。 (在FireFox中……除外!)

最好的选择是使用keydown事件并查找keyCode而不是charCode,并在必要时检查Shift键。按下Shift键时,您必须手动将keyCode映射到字符。

关于javascript - 在JavaScript上验证 '%'和 '(',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5994445/

10-13 01:07