12

我有一个类似于搜索的输入框(类似于 facebook)。我在按键事件上使用 jquery,效果很好。问题是我无法使用箭头键向下滚动结果集,每次按下其中一个时,搜索结果都会重新生成。那么是否可以忽略箭头键/ shift / tab等。

http://jsfiddle.net/UU6KG/

$("#search-form .search-terms").on("keypress", function(){
       $("#search-items #autocom").fadeIn();
    });

谢谢

4

4 回答 4

31

您需要过滤掉箭头键代码(37,38,39,40),试试这个:

请注意function(e)代替function()- 这允许您获取事件并因此获取关键代码。

$('#search-form .search-terms').on('keydown', function(e){
    // get keycode of current keypress event
    var code = (e.keyCode || e.which);

    // do nothing if it's an arrow key
    if(code == 37 || code == 38 || code == 39 || code == 40) {
        return;
    }

    // do normal behaviour for any other key
    $('#search-items #autocom').fadeIn();
});

点击查看关键代码列表

来自keypress/ keyup/文档的注释keydown

请注意,keydown 和 keyup 提供了指示按下哪个键的代码,而 keypress 指示输入了哪个字符。例如,小写的“a”将被 keydown 和 keyup 报告为 65,但被 keypress 报告为 97。所有事件都将大写“A”报告为 65。由于这种区别,当捕获特殊按键(如箭头键)时,.keydown() 或 .keyup() 是更好的选择。

keypress事件几乎在所有情况下都有效,但谨慎使用keyupkeydown因为某些浏览器(我认为某些旧版本的 Firefox)没有检测到使用该事件的某些键,例如箭头键。keypress

于 2013-07-23T10:18:55.267 回答
2

我还提出,您应该忽略不应直接导致新查询的其他键。shift例如,scroll-lock和等键end。在咨询了@theyetiman 链接到的相同键码列表后,我想出了这个 if 语句来忽略所有无关紧要的键(注意交换keypressforkeyup以允许捕获重要的键,例如backspace):

$('.search-terms').on('keyup', function(ev) {
    if ((ev.keyCode > = 9 && ev.keyCode <= 45) || (ev.keyCode >= 91 || ev.keyCode <= 93) || (ev.keyCode >= 112 || ev.keyCode <= 145)) {
        return;
    }
});
于 2017-06-25T20:22:41.283 回答
0
$(".search-terms").live('keydown',function(event){                  
if(event.which>=37 && event.which<=40)
                {
                    reutrn;

                }
于 2013-07-23T10:28:00.773 回答
0
if ( !Main.IsEmptyOrNull( event ) )
{
    $( document ).keydown( function ( e )
    {
        switch ( e.which )
        {
            case 16:
            case 17:
            case 18:
            case 37:
            case 38:
            case 39:
            case 40:
                break;
            default:
                var that = event.target;
                that.rows = that.getAttribute( 'data-min-rows' ) | 0, that.rows;
                that.rows = that.scrollHeight / 16 ;
                break;
        }
    });
}
于 2019-10-28T17:38:40.017 回答