Modo entre navegadores para obter automaticamente os eventos keydown de repetição quando a tecla é mantida pressionada

Usando Javascript / jQuery, como posso repetir automaticamente eventos keydown, ou equivalentes, quando alguém segura uma chave?

O que eu realmente quero é poder verificar se uma chave está inativa, mas de outras questões aqui parece que isso não é possível. A solução sugerida parece estar registrando eventos keydown e keyup e, em seguida, assumindo que a chave está desativada se um evento keydown tiver sido registrado e nenhuma chave subseqüente.

Essa solução é um problema no meu caso. Eu estou projetando um experimento on-line. O usuário deve manter pressionada a tecla "T" para todo o experimento, nunca deixando de usá-lo. O experimento consiste em vários testes e cada tentativa não tem acesso às informações registradas pelos testes anteriores. Assim, o julgamento 1 poderia registrar keydown para T, mas o trial 2 não teria acesso a esse registro e, portanto, não saberia se T estava inativo ou não.

Agora, se manter pressionada a tecla T produziria eventos keydown de repetição automaticamente para T, eu não teria nenhum problema porque o trial 2 apenas capturaria o próximo evento keydown para que o T aparecesse. Mas parece que eunão faça consiga repetir automaticamente os eventos keydown de manter a tecla pressionada, pelo menos no Firefox. Pelo que vejo, parece haver uma variação na forma como navegadores diferentes lidam com a tecla pressionada. O que é uma boa maneira de navegar entre navegadores para resolver meu problema?

By the way, se isso importa, eu também preciso ser capaz de detectar eventos de keyup e keydown para outras chaves enquanto tudo isso está acontecendo.

EDITAR: Depois de ler alguns dos comentários, voltei e verifiquei que, de fato, estou repetindo os eventos keydown em circunstâncias normais. Mas eu realmente não os entendo na situação específica em que preciso deles. Eu tenho um código simples que acho que isola o problema:

<!DOCTYPE html>
<html>

<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
</head>

<body>
<div id="target"></div>
</body>

<script type="text/javascript">

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

</script>

</html>

Se você pressionar uma tecla e soltar, solte e pressione novamente, o comportamento é o esperado, ou seja, há um contador que incrementa enquanto a tecla é pressionada, desaparece quando é solto e começa a incrementar novamente quando é pressionado novamente.

Mas se você pressionar as teclas DUAS para baixo e soltar UM, eu teria pensado que a outra (não liberada) tecla continuaria enviando eventos keydown para que o contador (após a reinicialização) continuasse incrementando. Na verdade, isso não acontece. Alguma idéia de por que e como fazer isso acontecer?

questionAnswers(2)

yourAnswerToTheQuestion