-- "при удержании keypress зацикливается"
Так работает клавиатура смирись.
Если не веришь открой блокнот зажми клавишу и она будет повторятся (за исключением некоторых специальных клавиш).
-- "и не срабатывает keyup"
Срабатывает но только когда отпускается клавиша.
Снова тут поможет КЕП =).
1. Пока нажата клавиша клавиатура генерирует событие нажатия клавиши и отправляет его браузеру множество раз (т.е. эмулирует повторное нажатие).
2. keyup срабатывает только при отжатии клавиши.
В твоем коде каждый раз при возникновении события keydown происходит создание нового события setInterval которое не зависит от setInterval созданных в предыдущих keydown.
За одно нажатие могут создаваться тысячи setInterval а удаляется только последний setInterval остальные 999 продолжают пытаться выполнятся каждые 10 миллисекунд.
Это примерно 100 вызовов функции в миллисекунду что довольно много и на слабых компьютерах может появляться эффект подвисания.
|