当用户在文本框中输入文本时,我try 将文本输入其中(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个个期间input text框的value始终是更改后的值before:

在此处输入图像描述

Question:如何在onKeyPress个个期间获取文本框的文本?

花言巧语

HTML DOM中有三个与"the user is typing"相关的事件:

  • 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')-用户已释放

将导致文本控件中出现五个字符:aaaaa

重要的一点是,你要回复WM_CHAR条信息,也就是重复的那条信息.否则,当按下某个键时,您会错过事件.

HTML种情况下,情况略有不同:

  • onKeyDown个个个个
  • onKeyPress个个
  • onKeyDown个个个个
  • onKeyPress个个
  • onKeyDown个个个个
  • onKeyPress个个
  • onKeyDown个个个个
  • onKeyPress个个
  • onKeyDown个个个个
  • onKeyPress个个
  • onKeyUp个个

HTML每按一次键就会重复KeyDown次和KeyPress次.并且仅当用户松开键时才引发KeyUp事件.

Take aways

  • I can respond to onKeyDown个个个个 or onKeyPress个个, but both are still raised before the input.value has been updated
  • I cannot respond to onKeyUp个个, because it doesn't happen as the text in the text-box changes.

Question:如何在onKeyPress个个期间获取文本框的文本?

额外阅读

推荐答案

处理input事件是一个一致的解决方案:在所有当代浏览器中,textareainput元素的处理结果为supported,并且在您需要时触发exactly:

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>

不过,我会稍微重写一下:

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>

Html相关问答推荐

带有很长标签的Bootstrap复选框

HTML CSS如何使用图像作为中心点将元素置于中心

我已经在我的网站上创建了按钮,但我不能让它们正确排列.'

UseEffect()从不调用preact

为什么这个高度为100%的页面会出现滚动条?

将网格包装在css中

Tumblr博客:如何修复提交页面和询问页面框列计数问题?

是否可以部分列出一个HTML有序列表

不能以Angular 更改输入的S边框 colored颜色

根据按钮位置左/右对齐按钮

如果DIV没有特定的sibling 姐妹,则以CSS为目标

穿过整个屏幕的旋转线

Flexbox在元素之间造成了太大的差距

带有下拉菜单的完整css导航-链接不起作用?

UL 的行为就像它不属于任何类别

使单行路径的 svg 填充父级的 100% 宽度

如何使用jQuery将我制作的通用头部和底部加载到多个HTML文件中?

如何使 Shiny 中的 selectInput Select 扩展到井面板之外或以其他方式使它们更容易被用户看到?

另一个 flex 元素之间的 CSS 空间

网站页脚中的 Quarto 安装版本