2010-06-29 60 views
2
$("#input").keyup(function(){ 
console.log($(this).val()); 
}) 

問題是,當一個在控制檯日誌慢慢鍵入「一個」 &「B」上面的代碼將導致「一」,「B」。但是當有人迅速做到時,結果就是「ab」,「ab」。使用鍵盤附近的字母比較容易。 「e」&「r」。 如何避免它?輸入值問題時快速打字

事件keydown和keypress不會遇到「quicktypers」的問題,但它們也在本例的早期階段,因爲輸入值在發生時不包含上次輸入的字母。或者,也許有一種方法可以讓這封恐怖的信一些如何?

回答

5

嗯,這個問題並不是真正的快速輸入,但實際上當關鍵事件發生時。試想一下:

  • 被壓
  • b的壓
  • 被釋放
  • B鬆開

不管這是怎麼幹得慢,你不會拿到鑰匙直到第一個鍵被釋放。顯然沒有辦法解決這個問題,在密鑰被釋放之前,你不能引發按鍵事件。

如果您只是想在按鍵事件中按下的鍵,您可以從事件對象獲取它。例如:

$('#input').keypress(function(e){ 
    console.log(e.which); 
}); 
0

我有一個類似的問題,並找到了解決方法。基本上,我每次創建一個包含事件timeStamp(e.timeStamp)的數組。然後我比較了數組中最後兩個值(最近兩個),並且如果時間差至少不超過100ms,則停止該事件。

這是我由KEYUP監聽器調用的函數內部代碼:

timeArray.push(e.timeStamp); // add new timeStamp to array  
if (timeArray.length >= 2) { 
     var diff = (timeArray[timeArray.length - 1] - timeArray[timeArray.length - 2]); 
     if (diff > 100) { // 1 second 
       // perform desired action 
     } else { return false; } 
} else { 
      // still perform desired action if array only has one timestamp 
     }