Я бы попробовал наблюдать за событиями нажатия клавиш, а не нажатием клавиш.
Когда произойдет нажатие клавиши, запишите время в переменную и запустите таймер с помощью setTimeout. Если keyup происходит в течение, возможно, 0,3 секунд (поэтому сравните сохраненное время с текущим временем, когда происходит это событие), считайте это касанием и вызывайте любую функцию, которая вам нужна для этого, и снимите setTimeout.
Если ваш таймер достигает 3 секунд, как в вашем примере, до того как сработала клавиатура, пользователь удерживает кнопку нажатой, чтобы вывести предупреждение.
Надеюсь, что это имеет смысл. Я не пробовал это, но это звучит хорошо в моей голове. LOL