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