Кросс-браузерный способ автоматически повторять события нажатия клавиш при удерживании клавиши
Используя Javascript / jQuery, как я могу получить автоматически повторяющиеся события нажатия клавиш или эквивалент, когда кто-то удерживает клавишу?
На самом деле я хочу проверить, не нажата ли клавиша, но по другим вопросам здесь это выглядит так:не возможно Предложенный обходной путь, по-видимому, записывает события нажатия клавиш и нажатия клавиш, а затем предполагает, что ключ не работает, если событие нажатия клавиш было записано, а последующего нажатия клавиш не было.
Это решение сталкивается с проблемой в моем случае. Я разрабатываю онлайн эксперимент. Пользователь должен удерживать клавишу «Т» ключ для всего эксперимента, никогда не подводя его. Эксперимент состоит из нескольких испытаний, и каждое испытание не имеет доступа к информации, записанной в предыдущих исследованиях. Таким образом, испытание 1 может записать нажатие клавиши для T, но испытание 2 нене иметь доступа к этой записи и, следовательно, не будетне знаю, был ли Т вниз или нет.
Теперь, если нажатие клавиши T приведет к автоматически повторяющимся событиям нажатия клавиш для T, у меня не будет проблем, потому что пробная версия 2 просто перехватит следующее событие нажатия клавиш для T, чтобы оно появилось. Но, похоже, яне получить автоматически повторяющиеся события нажатия клавиши, удерживая клавишу, по крайней мере, в Firefox. Из того, что я вижу, кажется, что разные браузеры могут удерживать клавишу в разных направлениях. Что такое хороший кросс-браузерный способ решения моей проблемы?
Кстати, если это имеет значение, мне также нужно иметь возможность обнаруживать события keyup и keydown для других клавиш, пока все это происходит.
РЕДАКТИРОВАТЬ: после прочтения некоторых комментариев я вернулся и подтвердил, что действительно получаю повторяющиеся события нажатия клавиш при обычных обстоятельствах. Но я действительно нене получить их в конкретной ситуации, в которой они мне нужны. Я'у нас есть простой код, который, я думаю, изолирует проблему:
var i;
function foo() {
i++;
$('#target').html(i);
}
function doTrial() { // do trial
i=0;
$(document).keydown(foo);
$(document).keyup(endTrial);
}
function endTrial() { // end trial
$('#target').html('');
$(document).unbind('keydown',foo);
$(document).unbind('keyup',endTrial);
doTrial();
}
doTrial();
Если нажать и удерживать клавишу, затем отпустить, а затем снова нажать, поведение будет таким, как ожидалось, то есть есть счетчик, который увеличивается, когда клавиша удерживается нажатой, исчезает, когда она 'S, а затем снова начинает увеличиваться, когданажал снова.
Но если вы нажмете ДВУХ клавиш, а затем отпустите ОДИН, я бы подумал, что другой (не отпущенный) ключ продолжит отправлять события нажатия клавиш, чтобы счетчик (после сброса) продолжал увеличиваться. На самом деле это неэто случилось. Есть идеи, почему и как это сделать?