Jquery按键事件忽略箭头键

时间:2013-07-23 10:13:40

标签: jquery html jquery-ui

我有一个输入框,就像搜索一样(类似于facebook)。 我在按键事件上使用jquery工作正常。 问题是我无法使用箭头键向下滚动结果集,每次按下其中一个结果时,搜索结果将被重新生成。 因此可以忽略箭头键/ shift / tab等。

http://jsfiddle.net/UU6KG/

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

由于

4 个答案:

答案 0 :(得分:28)

您需要过滤掉箭头键代码(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();
});

<强> Click for a list of key codes

keypress / keyup / keydown上的文档说明:

  

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

keypress事件适用于几乎所有情况,但使用keyupkeydown是谨慎的,因为有些浏览器(我认为某些旧版本的Firefox)请勿使用keypress事件检测某些键,例如箭头键

答案 1 :(得分:1)

我还要提出,您应该忽略不应直接导致新查询的其他键。例如,$query = mysqli_query($link, "SELECT * from packages WHERE trackingNumber LIKE '%$searchq%'"); while($row = mysqli_fetch_assoc($query)) { $shipper = $row['sendName']; $originCity = $row['originCity']; $originCountry = $row['originCountry']; } $sql = "SELECT * from history WHERE trackingNumber LIKE '%$searchq%' ORDER BY id ASC"; while($row = mysqli_fetch_assoc($sql)){ echo "<tr>"; echo "<td>" . $row['date'] . "</td>"; echo "<td>" . $row['time']. "</td>"; echo "<td>" . $row['city']. "</td>"; echo "<td>" . $row['country']. "</td>"; echo "<td>" . $row['activity']. "</td>"; echo "</tr>"; } echo "</table>"; shiftscroll-lock等关键字。在咨询了@theyetiman链接到的keycode list之后,我想出了if语句来忽略所有无关紧要的键(请注意endkeypress的交换以允许捕获像keyup)这样的重要键:

backspace

答案 2 :(得分:0)

$(".search-terms").live('keydown',function(event){                  
if(event.which>=37 && event.which<=40)
                {
                    reutrn;

                }

答案 3 :(得分: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;
        }
    });
}