2011-08-05 36 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