我试图在用户键入文本框中获取文本:
<html>
<body>
<input id="edValue" type="text" onKeyPress="edValueKeyPress()"><br>
<span id="lblValue">The text box contains: </span>
</body>
<script>
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);
}
</script>
</html>
代码运行没有错误,但该值的中input text
框,期间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提供了一个KeyDown
和KeyPress
每个按键重复。KeyUp
只有当用户释放密钥时才会引发该事件。
onKeyDown
或onKeyPress
,但两者input.value
在更新之前仍然提出onKeyUp
,因为文本框中的文本不会发生变化。问题:如何获取文本框的文本onKeyPress
?
发布于 2018-04-17 14:43:33
把事情简单化。同时使用onKeyPress()
和onKeyUp()
:
<input id="edValue" type="text" onKeyPress="edValueKeyPress()" onKeyUp="edValueKeyPress()">
这需要获取最新的字符串值(在键入之后)并且如果用户按下键也会更新。
发布于 2018-04-17 15:31:24
onKeyPress期间输入文本框的值始终是更改前的值
这是故意的:这允许事件监听器取消按键。
如果事件监听器取消该事件,则该值不会更新。如果事件没有被取消,则值被更新,但在事件监听器被调用之后。
要在字段值更新后获取值,请安排一个函数在下一个事件循环中运行。通常的做法是setTimeout
使用以下超时呼叫0
:
$('#field').keyup(function() {
var $field = $(this);
// this is the value before the keypress
var beforeVal = $field.val();
setTimeout(function() {
// this is the value after the keypress
var afterVal = $field.val();
}, 0);
});
https://stackoverflow.com/questions/-100008143
复制相似问题