Javascript bind keyup / down событие - PullRequest
       10

Javascript bind keyup / down событие

20 голосов
/ 11 сентября 2010

Как связать функцию с событиями нажатия / выключения клавиши?

Она может быть привязана либо ко всему документу, либо к одному элементу, или работать в этом случае.Это должно быть без какой-либо библиотеки JavaScript.Меня интересует только последний Firefox.В частности, элемент canvas.

Я пробовал это: (FF 3.6.9 Windows 7)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <div class="wrapper">
            <canvas id="game" width="800" height="400">
            </canvas>
        </div>
        <script type="text/javascript">
            var el = document.getElementById("game");

            el.onkeydown = function(evt) {
                evt = evt || window.event;
                alert("keydown: " + evt.keyCode);
            };

            el.onkeyup = function(evt) {
                evt = evt || window.event;
                alert("keyup: " + evt.keyCode);
            };
        </script>
    </body>
</html>

1 Ответ

40 голосов
/ 11 сентября 2010

Ключевые события запускаются только для документа и элементов, которые могут получить фокус. Поэтому для обработки ключевых событий в элементе <canvas> необходимо либо позволить ему получить фокус, добавив атрибут tabindex (например, <canvas id="game" width="800" height="400" tabindex="1"></canvas>), либо просто обработав ключевые события для всего документа, что может быть вы хотите (например, если у вас есть несколько элементов на странице, для которых вы хотите обрабатывать ключевые события).

Что касается того, как прикрепить обработчики событий, самый простой способ заключается в следующем:

var el = document.getElementById("your_element_id");

el.onkeydown = function(evt) {
    evt = evt || window.event;
    alert("keydown: " + evt.keyCode);
};

el.onkeyup = function(evt) {
    evt = evt || window.event;
    alert("keyup: " + evt.keyCode);
};

Если вам может понадобиться несколько слушателей, вы можете использовать addEventListener в большинстве браузеров или attachEvent в IE <= 8: </p>

if (typeof el.addEventListener != "undefined") {
    el.addEventListener("keydown", function(evt) {
        alert("keydown: " + evt.keyCode);
    }, false);
} else if (typeof el.attachEvent != "undefined") {
    el.attachEvent("onkeydown", function(evt) {
        alert("keydown: " + evt.keyCode);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...