我正在尝试在用户输入文本时获取文本框中的文本(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>
除了 onKeyPress
事件中的输入文本框的值总是在更改之前的值外,代码没有错误:
问题:如何在
onKeyPress
事件期间获取文本框的文本?
额外信息
HTML DOM 中与"用户正在键入"有关的事件有三个:
onKeyDown
onKeyPress
onKeyUp
在Windows中,当用户按住一个键并开始重复时,WM_Key
消息的顺序变得重要:
WM_KEYDOWN('a')
- 用户已按下 A 键WM_CHAR('a')
- 已从用户接收到一个a
字符WM_CHAR('a')
- 已从用户接收到一个a
字符WM_CHAR('a')
- 已从用户接收到一个a
字符WM_CHAR('a')
- 已从用户接收到一个a
字符WM_CHAR('a')
- 已从用户接收到一个a
字符WM_KEYUP('a')
- 用户已释放 A 键
将导致五个字符出现在文本控件中:aaaaa
重要的是,您要响应重复的 WM_CHAR
消息。否则,当按下键时会错过事件。
在HTML中情况略有不同:
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyDown
onKeyPress
onKeyUp
Html 在每次按键重复时都会触发 onKeyDown
和 onKeyPress
事件,而只有在用户释放键时才会引发 onKeyUp
事件。
要点:
- 我可以响应
onKeyDown
或onKeyPress
,但两者在input.value
更新之前都会被触发。 - 我无法响应
onKeyUp
,因为它不会随着文本框中的文本变化而发生。
问题:如何在onKeyPress
期间获取文本框中的文本?
onKeyUp
无法显示文本框中实时发生的更改。 - Ian Boyd