(change) like you mentioned triggers only when the input loses focus, hence is of limited use.
(keypress) triggers on key presses but doesn't trigger on certain keystrokes like the backspace.
(keydown) triggers every time a key is pushed down. Hence always lags by 1 character; as it gets the element state before the keystroke was registered.
(keyup) is your best bet as it triggers every time a key push event has completed, hence this also includes the most recent character.
So (keyup) is the safest to go with because it...
registers an event on every keystroke unlike (change) event