2012-05-11 144 views
1

我试图在一定数量的字符后自动跳到第二行。我正在使用jquery中的keypress函数来执行此操作。这里是我的代码:jquery keypress函数在不同浏览器的不同时间触发

<html> 
<head> 
    <script type="text/javascript" src="http://inet.website-name.com/jquery/jquery-1.7.min.js"></script> 
</head> 
<body> 
    <input id="input1"></input> 
    <br /> 
    <input id="input2"></input> 
    <script type="text/javascript"> 
     $('#input1').keypress(function (e) { 
      var tval = $('#input1').val(); 
      if (tval.length >= 5 && e.which !== 0 && e.charCode !== 0) { 
       $('#input2').focus(); 
      } 
     })  
    </script> 
</body> 
</html> 

时,这是在Chrome运行6个字符是在第一个框中,然后焦点切换到第二个框中键入我遇到的问题是。当它在Internet Explorer中运行时,首先将焦点更改为第二个框,然后键入第6个字符。我需要它在两个浏览器中具有相同的行为。

我试过使用keydown事件,并且始终如一地改变焦点,但即使使用退格键,箭头键或任何其他特殊键,焦点也会改变。
在此先感谢。

+0

是否缺少e.preventDefault();在将焦点设置到下一个控件之前? – Sunny

+0

@ 3nigma - 我的错误 - 它是e.preventDefault();编辑我的评论。 – Sunny

+0

这非常有帮助,但我仍然需要在第二个框中输入字符。我将如何重新发送该事件或发送输入的字符? – L3tha1Am6iti0n

回答

0

你可以把它切换到一个keyup事件并且它可以工作,尽管你不能使用e.charCode检查(是否有这个原因?)。还要注意的是> = 5变更为> 5

$('#input1').keyup(function (e) { 
     var c = String.fromCharCode(e.keyCode); 
     var isWordcharacter = c.match(/\w/);//matches a-z, A-Z, 0-9, and _ 
     var tval = $('#input1').val(); 
     if (tval.length > 5 && e.which !== 0 && isWordcharacter) { 
      $('#input2').focus(); 
     } 
    }); 

Fiddle

+0

这很接近,但如果您在第一个方框中使用箭头键,它仍然会改变焦点。 – L3tha1Am6iti0n

+0

我想我并不需要e.charcode。我从另一个线程拿了一些代码,但不知道为什么它在那里,所以我离开了它。 – L3tha1Am6iti0n

+0

我没有按照你的意思使用箭头键,在按下箭头键的时候没有任何效果,因为它们不会改变tval的长度。 –