当前位置: 首页 > 知识库问答 >
问题:

如何在onKeyPress期间获取输入文本框的文本?

钮才哲
2023-03-14

当用户在文本框中键入文本时,我尝试在其中获取文本(JSFIDLE):

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期间的输入文本框的值始终是更改前的值:

问题:如何在按键过程中获取文本框的文本?

HTML DOM中有三个与“用户正在键入”相关的事件:

  • onKeyDown
  • onKeyPress
  • onKeyUp

在Windows中,当用户按住一个键并开始重复时,WM_Key消息的顺序变得很重要:

  • WM_KEYDOWN('a')-用户按下了a

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

重要的一点是,您响应WM_CHAR消息,重复的消息。否则,当按下键时,您将错过事件。

在超文本标记语言中,情况略有不同:

  • onKeyDown

Html提供了一个KeyDownKeyPress每个按键重复。而KeyUp事件仅在用户释放钥匙时才会引发。

外卖

  • 我可以响应onKeyDownonKeyPress,但在输入之前,这两个按钮都会被触发。值已更新
  • 我无法响应onKeyUp,因为它不会在文本框中的文本更改时发生

问题:如何在按键过程中获取文本框的文本?

  • 使用jQuery获取表单值
  • 获取输入文本框中的值

共有3个答案

桂宏旷
2023-03-14

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);
});

试试这里:http://jsfiddle.net/Q57gY/2/

编辑:某些浏览器(如Chrome)不会触发退格按键事件;将按键更改为键入代码。

戚飞
2023-03-14

处理input事件是一个一致的解决方案:它在所有当代浏览器中都支持textareainput元素,并在需要时准确触发:

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>
韩楷
2023-03-14

保持简单。同时使用onKeyPress()onKeyUp()

<input id="edValue" type="text" onKeyPress="edValueKeyPress()" onKeyUp="edValueKeyPress()">

这将负责获取最新的字符串值(在键向上后),并在用户按住键时进行更新。

jsfiddle:http://jsfiddle.net/VDd6C/8/

 类似资料:
  • 问题内容: 使用jQuery获取和呈现输入值的方法有哪些? 这是一个: 问题答案:

  • 问题内容: 在量角器的文档中,我看到以下示例: 此处显而易见的是,您可以使用“ by.model”在输入框中设置值,但是如果您要查看输入框并查看其中的内容,则需要使用“ by.binding”。 我有一组代码(摘要)在其中执行: (在我的真实代码中,我保存了实体,然后在编辑模式下返回了该实体,并且我正在检查我的值是否已保存。但是它仍然归结为同一件事,并且此示例代码也存在相同的问题)。 这给我一个错

  • 在量角器的文档中,我看到了下面的例子: 这里看起来很清楚的是,您可以使用“by.model”在输入框中设置值,但是如果要查看输入框并查看其中的内容,则需要使用“by.binding”。 我有一组代码,其中(总结)我这样做: (在我的真实代码中,我保存实体,然后在编辑模式下返回它,并且我正在检查我的值是否实际保存。但它仍然归结为同样的事情,这个示例代码给出了同样的问题)。 这给了我一个错误: 理论上

  • 问题内容: 在某些情况下,我必须从标记中获取文本,例如- 输入标签中的文本是一些说 但是当我使用时,它什么也不会返回。 无论如何,我可以从标签中获取文本吗? 问题答案: 您可以使用以下任何一种: 让我知道这是否没有帮助。

  • 我有一个HTML元素. 加载页面后,我可以使用从该元素获取文本。 但随后我点击这个元素并更改里面的文本(例如,改为“已编辑”)。DOM中没有任何变化,包括属性 的值(即仍然返回“initial”,并且DOM中的元素看起来像) 如何提取现在在浏览器中可见的值(即字符串“已编辑”)?我需要执行一些JavaScript或其他东西吗?

  • 我有以下一组复选框: 使用javascript,我如何访问每个项目的文本。例如,对于id=“mensajes\u receptores\u list\u 5”的元素,我想得到文本“Carlos(Admin)”