首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在onKeyPress中获取输入文本框的文本?

如何在onKeyPress中获取输入文本框的文本?
EN

Stack Overflow用户
提问于 2018-04-17 06:30:23
回答 2查看 0关注 0票数 0

我试图在用户键入文本框中获取文本:

代码语言:javascript
复制
<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提供了一个KeyDownKeyPress每个按键重复。KeyUp只有当用户释放密钥时才会引发该事件。

  • 可以回应onKeyDownonKeyPress,但两者input.value在更新之前仍然提出
  • 我无法回应onKeyUp,因为文本框中的文本不会发生变化。

问题:如何获取文本框的文本onKeyPress

EN

回答 2

Stack Overflow用户

发布于 2018-04-17 14:43:33

把事情简单化。同时使用onKeyPress()onKeyUp()

代码语言:javascript
复制
<input id="edValue" type="text" onKeyPress="edValueKeyPress()" onKeyUp="edValueKeyPress()">

这需要获取最新的字符串值(在键入之后)并且如果用户按下键也会更新。

票数 0
EN

Stack Overflow用户

发布于 2018-04-17 15:31:24

onKeyPress期间输入文本框的值始终是更改前的值

这是故意的:这允许事件监听器取消按键。

如果事件监听器取消该事件,则该值不会更新。如果事件没有被取消,则值被更新,但在事件监听器被调用之后

要在字段值更新后获取值,请安排一个函数在下一个事件循环中运行。通常的做法是setTimeout使用以下超时呼叫0

代码语言:javascript
复制
$('#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);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档