Detecting “value” of input text field after a keydown event in the text field?

后端 未结 6 777
死守一世寂寞
死守一世寂寞 2020-12-08 08:04

So my site has an input box, which has a onkeydown event that merely alerts the value of the input box.

Unfortunately the value of the input does not include the ch

6条回答
  •  一生所求
    2020-12-08 08:45

    The event handler only sees the content before the change is applied, because the mousedown and input events give you a chance to block the event before it gets to the field.

    You can work around this limitation by giving the browser a chance to update the field's contents before grabbing its value - the simplest way is to use a small timeout before checking the value.

    A minimal example is:

    
    

    This sets a 1ms timeout that should happen after the keypress and keydown handlers have let the control change its value. If your monitor is refreshing at 60fps then you've got 16ms of wiggle room before it lags 2 frames.


    A more complete example (which doesn't rely on named access on the Window object would look like:

    var e = document.getElementById('e');
    var out = document.getElementById('out');
    
    e.addEventListener('input', function(event) {
      window.setTimeout(function() {
        out.value = event.target.value;
      }, 1);
    });
    
    

    When you run the above snippet, try some of the following:

    • Put the cursor at the start and type
    • Paste some content in the middle of the text box
    • Select a bunch of text and type to replace it

提交回复
热议问题