2009-12-11 40 views
6

我使用jQuery綁定了keydown事件,以允許在文本框中使用一些特定的字符。我試圖讓我的代碼跨瀏覽器和平臺兼容。我的主要問題是我無法找到一種方法將接收到的密鑰代碼映射到有效的char代碼,特別是來自數字鍵盤(小數點分隔符,它是昏迷還是句點等)的密鑰代碼。Javascript關鍵代碼=/= char代碼

預先感謝幫助, 費邊

回答

1

好吧,就像我在評論中所說的,這個問題背後的目標是過濾一個數字值的文本框。我設法使用按鍵事件達到我的目標。

我已經爲那些對解決方案感興趣的人發佈了jQuery plug-in

6

這是正確的。沒有這樣的映射,你可以做;​​甚至可能不對應於正在插入的字符。或Caps Lock可能會改變按鍵的含義,並且您無法嗅探到這一點。和various other wrinkles

如果您想知道字符代碼,您唯一的選擇就是使用keypress事件。

+0

這也是我的結論。但是,根據http://www.quirksmode.org/js/keys.html,似乎Firefox沒有正確處理按鍵事件。我有點卡住在這個問題上: -/ – 2009-12-11 14:17:36

+0

關於按鍵的另外一件事,我得到的時間和刪除鍵(不退格)相同的代碼:46.這對我來說是一個巨大的問題:( 使用英文Windows XP,英文Firefox,比利時鍵盤,比利時地圖 – 2009-12-11 14:36:31

+3

Firefox的按鍵效果很好,只需使用通常的'event.which'來獲取字符,然後爲IE的charCode-in-keyCode行爲添加回退,例如'var c ='which'in event?event.which:event.keyCode;' – bobince 2009-12-11 15:26:39

1

那麼,如果你的問題是把鍵碼翻譯成字符,爲什麼不讓瀏覽器爲你處理呢?這聽起來很可怕,但你可以簡單地讓瀏覽器修改文本框(這樣刪除就是刪除,而句點是句號),然後返回並編輯它......呃......也許是這樣的:

function hookEvents() { 
    $('#myTextBox').oldValue = $('#myTextBox').value; 
    $('#myTextBox').bind('keyup', function(event) { 
     // Maybe nothing's changed? 
     if (event.target.oldValue == event.target.value) { 
      return; 
     } 

     var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/; 
     var input = event.target.value; 
     var result = validInput.exec(input); 
     if (result.index != 0 || result[result.length-1] != input.length) 
     { 
      event.target.value = result[0]; 
     } 

     // update for later 
     event.target.oldValue = event.target.value; 
    }); 
} 

這種方法最大的問題是每按一次按鍵都會在屏幕上出現一會兒。另一方面,通過REGEX,您可以更好地控制允許輸入的格式。在上面的例子中,我只允許正數或負數(帶有一個可選的小數點)。如:「123」,「-123」,「-123.456」,「123.456」。

我知道這並不能真正回答你的問題,但它完全避免了這個問題!

+0

有趣,但正如您所說,角色將首先在文本框中進行設置。這是我不想擁有的東西。 – 2009-12-15 09:38:23