Непрерывное событие onkeydown в Firefox - PullRequest
1 голос
/ 15 июля 2010

У меня есть обычный обработчик события onkeydown, который запускает функцию, например так:

window.onkeydown = onKeyDown;

По сути, это работает, но в Firefox захватывает только 1 ключ. Затем я должен отпустить и снова нажать.

Google Chrome предлагает мне непрерывный захват, поэтому мне интересно, если это по выбору.

Ответы [ 3 ]

2 голосов
/ 15 июля 2010

Что делать, если вы попробуете что-то вроде этого:

var iskeydown = 0;
var samplecount = 0;

function onKeyDown() {
    iskeydown = 1;
    while (iskeydown) continuous();
}

function onKeyUp() {
    iskeydown = 0;
    alert(samplecount);
}

function continuous() {
    samplecount = samplecount + 1;
}

window.onkeydown = onKeyDown;
window.onkeyup = onKeyUp;

Сделано лучше:

var iskeydown = 0;
var samplecount = 0;

function onKeyDown() {
    iskeydown = 1;
    continuous();
}

function onKeyUp() {
    iskeydown = 0;
    alert(samplecount);
}

function continuous() {
    if (iskeydown == 1) {
         samplecount = samplecount + 1;
         setTimeout("continuous()",200);
    }
}

window.onkeydown = onKeyDown;
window.onkeyup = onKeyUp;
1 голос
/ 15 июля 2010

Полагаю, вы используете Mac или Linux, потому что в Windows Firefox поддерживает автоматически повторяющиеся события keydown.В других операционных системах, однако, вы получаете автоматически повторяющиеся события keypress только когда вы удерживаете клавишу нажатой.Таким образом, если возможно, используйте событие keypress.

См. превосходную статью Яна Вольтера о ключевых событиях JavaScript для получения дополнительной информации.

1 голос
/ 15 июля 2010

Вы пробовали событие keypress?Событие keypress наступает после keydown, если удерживать клавишу нажатой.

...