39

is there a way to implement a text change event to detect text change on an HTML input text field?
It's possible to simulate these using key events (key press etc), however, it's really not performant and difficult, is there a better way?

4
  • 4
    Please give more details. What do you NEED to do - without already thinking of ways to do it. For example if the field receives input from a bar code scanner, then I would MONITOR the field instead of using keyup/press or onchange Commented May 29, 2011 at 17:54
  • 1
    @mplugjan: user types into a textbox to search a query, and the output area gets updated constantly Commented May 30, 2011 at 6:06
  • Please refer to this for the most up-to-date answer: stackoverflow.com/a/26202266/1211622 Commented Jan 15, 2021 at 0:18
  • Does this answer your question? Best way to track onchange as-you-type in input type="text"? Commented Jan 15, 2021 at 0:20

5 Answers 5

57

onChange doesn't fire until you lose focus later. If you want to be really strict with instantaneous changes of all sorts, use:

<input
   type       = "text" 
   onchange   = "myHandler();"
   onkeypress = "this.onchange();"
   onpaste    = "this.onchange();"
   oninput    = "this.onchange();"
/>
Sign up to request clarification or add additional context in comments.

Comments

39

When I'm doing something like this I use the onKeyUp event.

<script type="text/javascript">
 function bar() {
      //do stuff
 }
<input type="text" name="foo" onKeyUp="return bar()" />

but if you don't want to use an HTML event you could try to use jQuerys .change() method

$('.target').change(function() {
   //do stuff
});

in this example, the input would have to have a class "target"

if you're going to have multiple text boxes that you want to have done the same thing when their text is changed and you need their data then you could do this:

$('.target').change(function(event) {
   //do stuff with the "event" object as the object that called the method
)};

that way you can use the same code, for multiple text boxes using the same class without having to rewrite any code.

4 Comments

is jquery's change event implemented using keyup events?
@user775187 no, I think it's the onChange event that it implements because you can also use the change event for things like radio buttons, selection lists, check boxes, ect.
-1: "but if you don't want to use a html event you could try to use jQuerys .change() method." There's a lot of options between using the event attribute in your html and using jQuery. The suggestion that there isn't is rather misleading. On top of that, it's also not very clear from your answer that these two things actually bind to completely different events.
Please refer to this for the most up-to-date answer: stackoverflow.com/a/26202266/1211622
6

Well unless I misunderstand you can just use the onChange attribute:

<input type="text" onChange="return bar()">

Note: in FF 3 (at least) this is not called until some the user has confirmed they are changed either by clicking away from the element, clicking enter, or other.

Comments

6

I used this line to listen for input events from javascript.
It is useful because it listens for text change and text pasted events.

myElement.addEventListener('input', e => { myEvent() });

Comments

3

Use the oninput event

<input type="text" oninput="myFunction();" />

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.