Javascript здесь непредсказуем и забавен.
onchange
происходит только при размытии текстового поля
onkeyup
& onkeypress
не всегда происходит при изменении текста
onkeydown
происходит при изменении текста (но не может отслеживать вырезать и вставлять щелчком мыши)
onpaste
& oncut
происходит при нажатии клавиш и даже при щелчке правой кнопкой мыши.
Итак, чтобы отслеживать изменения в текстовом поле, нам нужны onkeydown
, oncut
и onpaste
. При обратном вызове этого события, если вы проверите значение текстового поля, вы не получите обновленное значение, так как значение изменяется после обратного вызова. Таким образом, решение для этого состоит в том, чтобы установить функцию тайм-аута с тайм-аутом 50 миллисекунд (или может быть меньше), чтобы отслеживать изменения.
Это грязный хак, но это единственный способ, как я исследовал.
Вот пример.
http://jsfiddle.net/2BfGC/12/