I am trying to get the text in a text box as the user types in it (jsfiddle playground):
function edValueKeyPress() {
var edValue = document.getElementById("edValue");
var s = edValue.value;
var lblValue = document.getElementById("lblValue");
lblValue.innerText = "The text box contains: " + s;
//var s = $("#edValue").val();
//$("#lblValue").text(s);
}<input id="edValue" type="text" onKeyPress="edValueKeyPress()"><br> <span id="lblValue">The text box contains: </span>
The code runs without errors, except that the value of the input text box, during onKeyPress is always the value before the change:

Question: How do I get the text of a text box during
onKeyPress?
Bonus Chatter
There are three events related to “the user is typing” in the HTML DOM:
onKeyDownonKeyPressonKeyUp
In Windows, the order of WM_Key messages becomes important when the user holds down a key, and the key begins to repeat:
WM_KEYDOWN('a')– user has pushed down the A keyWM_CHAR('a')– anacharacter has been received from the userWM_CHAR('a')– anacharacter has been received from the userWM_CHAR('a')– anacharacter has been received from the userWM_CHAR('a')– anacharacter has been received from the userWM_CHAR('a')– anacharacter has been received from the userWM_KEYUP('a')– the user has released the A key
Will result in five characters appearing in a text control: aaaaa
The important point being that the you respond to the WM_CHAR message, the one that repeats. Otherwise you miss events when a key is pressed.
In HTML things are slightly different:
onKeyDownonKeyPressonKeyDownonKeyPressonKeyDownonKeyPressonKeyDownonKeyPressonKeyDownonKeyPressonKeyUp
Html delivers an KeyDown and KeyPress every key repeat. And the KeyUp event is only raised when the user releases the key.
Take aways
- I can respond to
onKeyDownoronKeyPress, but both are still raised before theinput.valuehas been updated - I cannot respond to
onKeyUp, because it doesn’t happen as the text in the text-box changes.
Question: How do I get the text of a text-box during onKeyPress?
Bonus Reading
Advertisement
Answer
Handling the input event is a consistent solution: it is supported for textarea and input elements in all contemporary browsers and it fires exactly when you need it:
function edValueKeyPress() {
var edValue = document.getElementById("edValue");
var s = edValue.value;
var lblValue = document.getElementById("lblValue");
lblValue.innerText = "The text box contains: " + s;
}<input id="edValue" type="text" onInput="edValueKeyPress()"><br> <span id="lblValue">The text box contains: </span>
I’d rewrite this a bit, though:
function showCurrentValue(event)
{
const value = event.target.value;
document.getElementById("label").innerText = value;
}<input type="text" onInput="showCurrentValue(event)"><br> The text box contains: <span id="label"></span>