按键按下时输入值返回不正确的值(少一个)

Input value onkeydown returns incorrect value (one less)

本文关键字:一个 不正确 输入 返回      更新时间:2023-09-26

我正在为客户的项目编写一个脚本,当您达到特定输入的最大字符数时,该脚本会自动将您编入下一个输入字段。由于某种原因,输入值返回的值比应有的值少一个,因此当输入超过"阈值"的额外字符时,选项卡将转到"下一个"输入。

这是我监视输入值的脚本 - ofc,如果有更好的方法,请告知:) -

var watchLength = function (watch) {
    watch.onkeypress = function () {
        var nextInput = getNextSibling(this);
        console.log(this.getAttribute('data-autotab-length'));
        console.log(this.value.length);
        if (this.value.length == this.getAttribute('data-autotab-length')) {
            nextInput.focus();
            console.log('Limit reached here');
        }
    };
};

以及工作输入的 jsFiddle。第一个输入限制为"2"个字符,但当您键入 3 时,它会跳转到下一个输入。我认为这与按键/按键事件未读取初始值有关,但我不知道如何解决它。任何帮助真的非常感谢。

我正在控制台中记录结果:

http://jsfiddle.net/qdnCZ/

问题是,onkeypress会在你想要它之前触发。您可以简单地将onkeypress替换为 onkeyup ,这样您就可以确保<input>元素value在检查时正确设置。

请参阅:http://jsfiddle.net/qdnCZ/1/

是的,它会少返回一个,只需在长度检查上使用 +1。这是因为onkeypress事件是在字段更新之前执行的,这意味着使用e.preventDefault()字母将不会出现在字段中。否则,您可以使用onkeyup

使用 onkeyup 代替onkeypress

onkeyup在字段更新后被触发

if (this.value.length == this.getAttribute('data-autotab-length')) {
                nextInput.focus();  
                console.log('Limit reached here');
                return false; // this is prevent the third value being entered
            }

更新的小提琴