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

玛富吉阿西夫

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

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">

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

$ .get在下一次执行代码之前不起作用

React.JS 如何只允许使用“onKeyPress”在输入中输入数字

在JS / JQUery中执行下一次循环迭代之前,如何使代码等待x秒?

在 Node.js 的循环中移动到下一次迭代之前等待 Promise

多个onKeyPress函数事件在FF中不起作用

Onkeypress更新输入落后1步

Javascript - 将 .onkeypress 输入推送到数组

JS-onkeypress不断将文本追加到结尾

为什么我的动态标题在下一个 js 中不起作用

图像在下一个 js 中不起作用。给出错误“主机名”

如何将值存储到此dict中,以便在下一次迭代中起作用?

输入的事件侦听器(onkeypress,onkeydown)在Android数字键盘中不起作用

Vue.js 3 按钮在第一次点击后不起作用

反应,无法从onKeyPress输入事件获取event.key

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

在jQuery中动态获取输入标签onkeypress的值

QTextEdit-如何“取消” onKeyPress()中输入的键代码

jQuery-OnKeyPress输入文本标题大小写

html5画布。document.onkeypress箭头键不起作用

尝试在下一个 js 反应中每 3 秒检查一次切换输入单选按钮

在javascript onkeypress中进行一些计算

如何在下一次迭代之前在JavaScript循环中添加延迟?

在下一次迭代之前使用暂停来遍历JSON对象

使用moment.js计算直到下一次下午2点出现的时间

在下一次按下时反应本机焦点文本输入

下一次尝试后显示不透明度的脚本不起作用

将Javascript onkeypress转换为Knockout.js以在enter上调用

检测何时使用onKeyPress而不是onKeyUp在React.js中按下Delete或Backspace键

除非是第一次在脚本中调用,否则Backbone.js函数将不起作用