Search code examples
javascripthtmlforms

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


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 :-)


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