2011-08-05 53 views
0

希望有人可以帮助我这个。我使用html5/javascript制作游戏,我希望用户能够使用箭头键移动地图,并在玩家点击画布时执行一些代码。我有所有这些工作正常,但由于某种原因,有时当用户单击画布时,keydown侦听器停止工作,除非他们再次点击画布外部。我试图谷歌,它似乎是我想设立代表团解决它,但即时通讯麻烦得到它的工作。这是我目前的代码:Javascript keydown listener不能工作后点击

$(window).keydown(function(event){keyDown(event);}); 

$("#game").click(function(e){ 
    var x = e.pageX - $(this).offset().left; 
    var y = e.pageY - $(this).offset().top; 
    alert(x+" "+y); 
}); 

任何帮助将不胜感激。

回答

1

我插你的代码中的jsfiddle,它似乎每一次的工作:http://jsfiddle.net/ianoxley/fb26Y/

只是想知道哪些浏览器/操作系统您正在使用?在您的​​事件处理程序中调用的keyDown函数中发生了什么?

+0

好吧我现在感觉很蠢。问题似乎是我正在使用警报进行调试,并且按下Enter键以摆脱警报窗口时,DOM是如何失去焦点的。从我的代码中删除了警报,现在它工作正常。 – James

+1

@James:使用'console.log'作为调试消息(可通过Firebug或IE开发工具使用,内置于Chrome和Safari中(不了解Opera))。 –

1

我想你的标签没有得到事件,因为它没有焦点?

这里有一个在我的环境中工作的解决方案。 这使得一个div标签是可以通过它的tabindex =“0”属性。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
      <script type="text/javascript"> 
      function xxx() { 
       var div = document.getElementById('x'); 
       div.focus(); 
      } 
      function keyd(e) { 
      alert("DDDDDDDD" + e); 
      } 
      </script> 

    </head> 
    <body onload="xxx();"> 
      <div tabindex="0" id='x' onkeydown="keyd(event);" style="background-color: green; width: 100px; height: 100px;">    
      </div> 
    </body> 
</html> 
+0

这不是我的情况,但我有一个想法来解决我的问题。谢谢。失去焦点是我的问题。 – Kabkee