2010-08-17 4 views

ответ

11

использовать событие keyup вместо keypress. keydown покажет значение перед нажатием клавиши, как и keypress (по-видимому).

+2

Странно, что @Tom предлагает уже попробовать «onkeyup»? – MrWhite

+1

Я бы предположил, что он не пробовал это правильно. –

+3

* keyup * срабатывает только при отпускании клавиши, он не срабатывает при повторных нажатиях клавиш. Поэтому, если вы удерживаете клавишу, чтобы ввести более одного символа, клавиатура не срабатывает до тех пор, пока ключ не будет отпущен. –

0

Поскольку нажатие клавиши не регистрируется до тех пор, пока не произойдет событие keyup. Таким образом, вы должны обнаружить событие onkeyup вместо onkeypress.

8

В событии keypress по-прежнему можно предотвратить регистрацию типизированного символа, поэтому значение ввода не может быть обновлено до тех пор, пока не произойдет событие keypress. Вместо этого вы можете использовать событие keyup или использовать window.setTimeout() для настройки задержки.

+0

+1 для * window.setTimeout() *, используя задержку 0 мс, достаточно, чтобы код выполнялся сразу после обновления ввода. –

+0

@ Энди: Очень хороший совет. Работает (почти) в каждом браузере? –

+1

@Marcel: он будет работать одинаково в каждом браузере. Я рекомендую прочитать статью J Resig [Как работают JavaScript-таймеры] (http://ejohn.org/blog/how-javascript-timers-work/) для более подробной информации по этому вопросу. –