2014-11-22 56 views
0

我開發使用JavaScript的Web應用程序中的Javascript的keydown:既爲箭頭和減號,變通爲Firefox

  • 如果按下右箭頭,我們去到一個新的水平檢查。
  • 如果減號被按下,我們減少難度。
  • 如果空格鍵被按下,我們暫停。

因爲我想檢查箭頭,所以我不能使用keypress事件,所以我使用的是keydown事件。代碼的簡化部分(使用jQuery)如下。

$(document).keydown(dealWithKeyDown); 
function dealWithKeyDown(evt) { 
    if (evt.which == 39) // Right arrow. 
     nextLevel(); 
    if (evt.which == 189) // Minus sign. 
     reduceDifficulty(); 
    if (evt.which == 32) // Space. 
     pause(); 
} 

我現在遇到的問題是它在Firefox中不起作用。在FF中,減號的鍵碼是173而不是189。(還有更多不同之處。)任何人都可以提出簡單/優雅的解決方法嗎?

我能想到的最簡單的解決方法是使用'evt.key'屬性,但'evt.key'在Chrome中未定義,而對於空格按鈕,IE給出'evt.key =='空格鍵「'同樣如此,而Firefox會將'evt.key =='」'視爲true。這是一個不一致的噩夢。

+0

請問什麼火狐的意義是這樣做呢?他們的鍵碼因爲某種原因而不同? – MCTaylor17 2014-11-22 02:25:55

+0

_「這是一個不一致的噩夢」_ ...這就是爲什麼有那裏的圖書館爲你處理這個問題:-)我建議你看一下https://github.com/keithamus/jwerty – CBroe 2014-11-22 02:42:21

回答

1

您可以檢查用戶代理並相應地設置數字,然後使用您取而代之的數字!

var key = (/Firefox/i.test(navigator.userAgent)) ? 173 : 189 ; 

則:

if (evt.which == key) 

您可以爲您的所有數字/可能性