4

我正在为我们客户的项目编写一个脚本,当您达到特定输入的最大字符数时,它会自动将您转到下一个输入字段。出于某种原因,输入值返回的值比应有的值小一,因此当在“阈值”上方输入额外字符时,会跳到“下一个”输入。

这是我观察输入值的脚本-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 时,它会跳转到下一个输入。我认为这与 keypress/keydown 事件没有读取初始值有关,但我不知道如何修复它。任何帮助都非常感谢。

我在控制台中记录结果:

http://jsfiddle.net/qdnCZ/

4

4 回答 4

3

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

见:http: //jsfiddle.net/qdnCZ/1/

于 2013-10-11T09:18:59.673 回答
0

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

于 2013-10-11T09:19:28.240 回答
0

onkeyup改为使用onkeypress

onkeyup字段更新后被解雇

于 2013-10-11T09:19:38.133 回答
0
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
            }

更新的小提琴

于 2013-10-11T09:20:20.180 回答