Если я наберу 'St', к тому времени, когда я нажму на t, если я выведу вход textfield.value в функции onkeypress / onkeydown, я получу только 'S'.
textfield.value
onkeypress
onkeydown
Почему это? Как мне избавиться от этого лага?
использовать событие keyup вместо keypress. keydown покажет значение до нажатия клавиши, как keypress (очевидно).
keyup
keypress
keydown
В событии keypress все еще возможно предотвратить регистрацию введенного символа, поэтому значение ввода не может быть обновлено до окончания события keypress. Вместо этого вы можете использовать событие keyup или window.setTimeout() для установки задержки.
window.setTimeout()
Поскольку нажатие клавиши не регистрируется, пока не произойдет событие keyup. Таким образом, вы должны обнаружить событие onkeyup вместо onkeypress.
onkeyup