2014-11-22 51 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) 

您可以为您的所有数字/可能性