javascript - js onkeypress 在下一次输入之前不起作用

标签 javascript

当输入大小正好是两个时,我试图插入一个连字符。
这是我的代码

document.getElementById('numberInput').onkeypress = function() {
  if (this.value.length == 2) {
    this.value = this.value + '-';
  }
}
<input type="text" id="numberInput">

但问题是 - 在输入第三个字符之前不会出现。虽然连字符放置正确,但我的意思是在两个字符之后。
输入两个字符后如何立即获得连字符?
我试过onkeyup但问题是当我按下退格键时它也会触发。当有两个字符时,会出现连字符,但此时如果我按退格键并删除连字符,它会立即返回。所以我选择onkeypress

最佳答案

输入文本框的值,在onKeyPress期间始终是更改前的值。这允许事件监听器取消按键。
要在字段值更新后获取值,请安排一个函数在下一个事件循环上运行。执行此操作的常用方法是调用 setTimeout,超时为 0:

document.getElementById('numberInput').onkeypress = function() {
  // arrow function keeps scope
  setTimeout(() => {
    // now it is the value after the keypress
    if (this.value.length == 2) {
      this.value = this.value + '-';
    }
  }, 0);
}
<input type="text" id="numberInput">

关于javascript - js onkeypress 在下一次输入之前不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71938889/

相关文章:

javascript - 在浏览器调整大小时从所有图像中删除类

javascript - 在 JavaScript 中使用 IF 处理复选框状态

javascript - 在jquery中查找远方 parent

javascript - node.js 请求编码(谷歌翻译)

javascript - 将 UTC 日期时间转换为本地日期时间

javascript - 如何在 React 上使用 Redux 重新渲染所有页面

javascript - HTML5 Canvas 中的大型 2D 世界渲染

javascript - jQuery/JS 获取文本区域的滚动条高度

javascript - JavaScript 中 while 循环中的 http 请求

javascript - 使用 PHP 列出来自使用 SOAP 的 Web 服务的信息