2013-10-11 39 views
3

我正在为我们的客户端项目创建一个脚本,当您为特定输入点击最大字符数时,它将自动标记到下一个输入字段。出于某种原因,输入值返回的值比它应该小一些,因此当在“阈值”之上输入一个额外的字符时,将其标记为“下一个”输入。输入值onkeydown返回不正确的值(少一个)

这里是我的脚本来观看输入值 - 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/

回答

1

的问题是,你希望它之前onkeypress将闪光。您可以简单地将onkeypress替换为onkeyup,这样可以确保<input>元素value在您检查它时正确设置。

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

+0

妈的,总是这么简单的东西:)!非常感谢你。 – Halcyon991

+0

不要提及它。 – jAndy

0

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

0

使用onkeyup代替onkeypress

onkeyup后场被炒鱿鱼得到更新

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 
      } 

Updated fiddle