setTimeout
возвращает идентификатор таймера. Итак, что бы я сделал, после того, как вы получите событие keyDown, я бы запустил таймер с очень коротким периодом ожидания, например так:
var globalTimerId = -1;
var keyDownCount = 0;
function handleKeyDown(e) {
if (globalTimerId != -1) {
clearTimeout(globalTimerId);
keyDownCount++;
}
/* 500 means 1/2 a second, adjust for your needs */
globalTimerId = setTimeout(handleKeyDownAfterWait, 500);
keyDownCount = 1;
}
function handleKeyDownAfterWait() {
globalTimerId = -1;
/* keyDownCount will have the number of times handleKeyDown was called */
}
Таким образом, идея заключается в том, что каждый раз, когда получено событие keyDown, таймер очищается (при условии, что он еще не истек) и перезапускается. Если таймер истекает, пользователь отпустил ключ, и вы можете справиться с этим в handleKeyDownAfterWait
.
Однако могут быть и другие более элегантные решения с jQuery или другой библиотекой JS. Это просто что-то быстрое и грязное (и, возможно, глючное;))