Best way to track onchange as-you-type in input type="text"?

forms, html, javascript

Solution

Update:

See Another answer (2015).

Original 2009 Answer:

So, you want the `onchange` event to fire on keydown, blur, and paste? That's magic.

If you want to track changes as they type, use `"onkeydown"`. If you need to trap paste operations with the mouse, use `"onpaste"` (IE, FF3) and `"oninput"` (FF, Opera, Chrome, Safari1).

1Broken for `<textarea>` on Safari. Use `textInput` instead

Problem

In my experience, `input type="text"` `onchange` event usually occurs only after you leave (`blur`) the control. Is there a way to force browser to trigger `onchange` every time `textfield` content changes? If not, what is the most elegant way to track this “manually”? Using `onkey*` events is not reliable, since you can right-click the field and choose Paste, and this will change the field without any keyboard input. Is `setTimeout` the only way?.. Ugly :-)

Original source