2013-04-22 70 views
2

我使用的HTML輸入標籤製作一個簡單的搜索欄:防止按鍵的方法被調用多次

<input type="text" id="search_bar" /> 

然後在jQuery的我實現按鍵的方法來檢測用戶點擊時輸入/回車鍵:

$('#search_bar').keypress(function(e) { 
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return 
     e.preventDefault(); 
     //do stuff 
    } 
}); 

但是,如果用戶決定按住回車鍵,該方法將被多次調用。我想禁用這種行爲,即keypress只在用戶點擊輸入時調用一次,但在按住鍵時不會再次調用。什麼是完成這個最好的方法?

謝謝。

+1

嘗試使用的onkeyup方法,而不是http://api.jquery.com/keyup/ – TommyBs 2013-04-22 19:28:51

回答

2

嘗試使用​​或keyup。這可能會改變keycode的值。

+1

'onkeyup'爲當一個鍵被檢測按鍵 – nullability 2013-04-22 19:40:00

+1

傳統的行爲時,keydown事件是多次發射。只有關鍵事件被激發一次 – 2018-03-03 19:34:22

1

嘗試使用KeydownKeyup事件代替。只有在從一個州改變爲另一個州的情況下,他們纔會被解僱。

1

你可以使用,因爲你正在經歷什麼是keypress行爲的定時器(keyup和​​可用於計算的按鍵,但它可能會是相當棘手的追蹤所有edge cases on all browsers)。

$('#search_bar').keypress(function(e) { 
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return 
     e.preventDefault(); 

     if (window.preventDuplicateKeyPresses) 
      return; 

     window.preventDuplicateKeyPresses = true; 
     window.setTimeout(function() { window.preventDuplicateKeyPresses = false; }, 500); 

     //do stuff 
    } 
}); 
4

使用onkeyup()只會檢測到密鑰已被釋放。這應該解決你的問題。

$('#search_bar').keyup(function(e) { 
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return 
     e.preventDefault(); 
     console.log("xx"); 
    } 
}); 

按住回車鍵 - xx僅記錄在發行版上。

小提琴:http://jsfiddle.net/veRkd/