如果使用jQuery按下某些键

时间:2014-03-17 10:42:38

标签: javascript jquery keyboard

我正在构建一个Web应用程序,我需要解决这个问题。

对于这个项目,我需要使用keyup函数。它本身并不困难:

if (e.keyCode == 40) { //Up arrow key
    moveListUp();
} else if(e.keyCode == 38){ //Down arrow key
    moveListDown();         
} else{
    $('.searchBox').focus();
}

如您所见,如果按下箭头键,则需要执行一项功能。但是当按下任何其他键时,它会在searchBox上执行焦点功能。

我不希望除左右箭头键之外的每个键都能触发焦点功能。我只想要数字和字母键来触发该功能。

如何在不必为每个键定义if语句的情况下实现此目的?

3 个答案:

答案 0 :(得分:1)

你可以像这样的正则表达式检查你的密钥:

$(window).on('keydown', function(e){
    var key_char = String.fromCharCode(e.keyCode),
        regex = /[a-zA-Z0-9]/;

    if (e.keyCode == 40) { //Up arrow key
        moveListUp();
    } else if(e.keyCode == 38){ //Down arrow key
        moveListDown();         
    } else if( regex.test(key_char)){ // matches only alphanumeric keys
      $('.searchBox').focus();
    }
});

答案 1 :(得分:0)

如果我理解正确,您需要在调用focus()之前检查密钥是否为字母数字,在这种情况下,您可以检查代码是否在正确范围之一。

else if ((e.keyCode >= 65 && e.keyCode <= 90) || (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 97 && e.keyCode <= 122))
{
     $('.searchBox').focus();
}

那是else if ((uppercaseLetter) || (Number) || (lowercaseLetter))

答案 2 :(得分:0)

在最后的其他情况下使用return false:

if (e.keyCode == 40) { //Up arrow key
    moveListUp();
} else if(e.keyCode == 38){ //Down arrow key
    moveListDown();         
} else if(e.keyCode > 46 || e.keyCode < 91){
    $('.searchBox').focus();
} else{
   return false;
}