2013-07-23 121 views
10

我有一個輸入框,行爲像一個搜索(類似於臉譜)。 我正在使用jquery的按鍵事件工作正常。 問題是,我無法使用箭頭鍵在結果集上向下滾動,每次按下其中一個按鈕時搜索結果正在重新生成。 所以是有可能忽略箭頭鍵/移位/標籤等Jquery按鍵事件忽略箭頭鍵

http://jsfiddle.net/UU6KG/

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

感謝

回答

27

您需要過濾掉的箭頭鍵碼(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和KEYUP提供指示哪個鍵按下一個代碼,而按鍵指示哪個字符被輸入。例如,一個小寫的「a」將被keydown和keyup報告爲65,而按鍵則爲97。大寫字母「A」在所有事件中報告爲65。由於這種區別,捕捉箭頭鍵等特殊按鍵時,.keydown()或.keyup()是更好的選擇。

keypress事件工作在幾乎所有情況,但它是謹慎使用keyup或​​,因爲某些瀏覽器(我認爲火狐的一些較老的版本),沒有檢測到某個鍵,如箭頭鍵,使用keypress事件。

+1

非常感謝詳細的答案,更新的小提琴:http://jsfiddle.net/UU6KG/1/ – Athanatos

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

       } 
1

我還會提交您應該忽略不應直接導致新查詢的其他鍵。例如,諸如shift,scroll-lockend的鍵。諮詢該@theyetiman鏈接到同一keycode list後,我想出了這個if語句忽略不應該的問題(注意keypress交換爲keyup,使重要的鍵捕獲像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; 
    } 
}); 
+0

代碼列表很有趣,但是在條件邏輯中可能存在一個錯誤(我犯了複製+粘貼!)。 另外,在你的例子中,空格char被忽略。對於其他複製+貼圖:如果他們最後輸入內容,那很好,但如果用戶向左箭頭和按下空間,則數據可能會更改。 – Mayyit