我有一個輸入框,行爲像一個搜索(類似於臉譜)。 我正在使用jquery的按鍵事件工作正常。 問題是,我無法使用箭頭鍵在結果集上向下滾動,每次按下其中一個按鈕時搜索結果正在重新生成。 所以是有可能忽略箭頭鍵/移位/標籤等Jquery按鍵事件忽略箭頭鍵
$("#search-form .search-terms").on("keypress", function(){
$("#search-items #autocom").fadeIn();
});
感謝
我有一個輸入框,行爲像一個搜索(類似於臉譜)。 我正在使用jquery的按鍵事件工作正常。 問題是,我無法使用箭頭鍵在結果集上向下滾動,每次按下其中一個按鈕時搜索結果正在重新生成。 所以是有可能忽略箭頭鍵/移位/標籤等Jquery按鍵事件忽略箭頭鍵
$("#search-form .search-terms").on("keypress", function(){
$("#search-items #autocom").fadeIn();
});
感謝
您需要過濾掉的箭頭鍵碼(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和KEYUP提供指示哪個鍵按下一個代碼,而按鍵指示哪個字符被輸入。例如,一個小寫的「a」將被keydown和keyup報告爲65,而按鍵則爲97。大寫字母「A」在所有事件中報告爲65。由於這種區別,捕捉箭頭鍵等特殊按鍵時,.keydown()或.keyup()是更好的選擇。
的keypress
事件工作在幾乎所有情況,但它是謹慎使用keyup
或,因爲某些瀏覽器(我認爲火狐的一些較老的版本),沒有檢測到某個鍵,如箭頭鍵,使用keypress
事件。
$(".search-terms").live('keydown',function(event){
if(event.which>=37 && event.which<=40)
{
reutrn;
}
我還會提交您應該忽略不應直接導致新查詢的其他鍵。例如,諸如shift
,scroll-lock
和end
的鍵。諮詢該@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;
}
});
代碼列表很有趣,但是在條件邏輯中可能存在一個錯誤(我犯了複製+粘貼!)。 另外,在你的例子中,空格char被忽略。對於其他複製+貼圖:如果他們最後輸入內容,那很好,但如果用戶向左箭頭和按下空間,則數據可能會更改。 – Mayyit
非常感謝詳細的答案,更新的小提琴:http://jsfiddle.net/UU6KG/1/ – Athanatos