Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击后Javascript按键侦听器不工作_Javascript_Jquery_Input_Listener - Fatal编程技术网

单击后Javascript按键侦听器不工作

单击后Javascript按键侦听器不工作,javascript,jquery,input,listener,Javascript,Jquery,Input,Listener,希望有人能帮我。我正在用html5/javascript制作一个游戏,我希望用户能够用箭头键移动地图,并在玩家点击画布时执行一些代码。我所有这些都可以正常工作,但由于某些原因,有时当用户单击画布时,keydown侦听器停止工作,除非他们再次单击画布之外的部分。我试着用谷歌搜索它,似乎我想建立一个授权来修复它,但我很难让它正常工作。以下是我当前的代码: $(window).keydown(function(event){keyDown(event);}); $("#game").click(fu

希望有人能帮我。我正在用html5/javascript制作一个游戏,我希望用户能够用箭头键移动地图,并在玩家点击画布时执行一些代码。我所有这些都可以正常工作,但由于某些原因,有时当用户单击画布时,keydown侦听器停止工作,除非他们再次单击画布之外的部分。我试着用谷歌搜索它,似乎我想建立一个授权来修复它,但我很难让它正常工作。以下是我当前的代码:

$(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);
});

任何帮助都将不胜感激。

我将您的代码粘贴在JSFIDLE中,每次都能正常工作:


只是想知道你在使用哪个浏览器/操作系统?在
keyDown
事件处理程序中调用的
keyDown
函数中会发生什么情况?

我将您的代码插入JSFIDLE,它似乎每次都能工作:


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

我猜您的标记没有得到事件,因为它没有焦点

这里有一个在我的环境中工作的解决方案。 使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>

函数xxx(){
var div=document.getElementById('x');
分区焦点();
}
功能键D(e){
警报(“DDDD”+e);
}

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

这里有一个在我的环境中工作的解决方案。 使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>

函数xxx(){
var div=document.getElementById('x');
分区焦点();
}
功能键D(e){
警报(“DDDD”+e);
}

好吧,我现在觉得自己很蠢。问题似乎是我在使用警报进行调试,而当按enter键清除警报窗口时,DOM会失去焦点。从我的代码中删除了警报,现在工作正常。@詹姆斯:使用
console.log
查看调试消息(可通过Firebug或IE开发者工具、内置Chrome和Safari(不知道Opera))。好吧,我现在觉得自己很笨。问题似乎是我在使用警报进行调试,而当按enter键清除警报窗口时,DOM会失去焦点。从我的代码中删除了警报,现在工作正常。@詹姆斯:使用
console.log
查看调试消息(可通过Firebug或IE开发者工具、内置Chrome和Safari(不知道Opera))。这不是我的情况,但我有办法解决我的问题。谢谢失去注意力是我的问题。这不是我的情况,但我有了解决问题的办法。谢谢注意力不集中是我的问题。