Javascript keydown слушатель не работает после нажатия - PullRequest
1 голос
/ 05 августа 2011

в надежде, что кто-нибудь может мне помочь с этим.Я делаю игру в html5 / javascript, и я хочу, чтобы пользователь мог перемещать карту с помощью клавиш со стрелками и выполнять некоторый код, когда игрок нажимает на холст.У меня все это работает нормально, но по какой-то причине иногда, когда пользователь нажимает на холст, слушатель нажатия клавиш перестает работать, если он снова не щелкает за пределами холста.Я пытался Google, и, кажется, я хочу создать делегацию, чтобы исправить это, но у меня возникли проблемы с его работой.Вот мой текущий код:

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

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Я полагаю, у вашего тега нет события, потому что у него нет фокуса?

Здесь решение с работой в моей среде. Чтобы сделать тег 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>
1 голос
/ 05 августа 2011

Я вставил ваш код в jsFiddle, и он, кажется, работает каждый раз: http://jsfiddle.net/ianoxley/fb26Y/

Просто интересно, какой браузер / ОС вы используете?А что происходит в вашей keyDown функции, вызываемой в вашем keydown обработчике событий?

...