autotabulate,IE失败

时间:2017-03-13 09:10:28

标签: javascript jquery internet-explorer

我有一个autotab功能,

 <input type="text" class="autoTab" maxlength="2" /> :
 <input type="text" />

 autoTab : function(){
  $('.autoTab').on('keypress', function(e){

  if($(this).val().length + 1 === parseInt($(this).attr("maxlength"))){
     $(this).next().focus();
  }
});

}

它在Chrome中运行良好,但在IE中,在写入最后一个字符之前制表,并且不会写入。

我试过了:

    autoTab : function(){
     $('.autoTab').on('keypress', function(e){

       var ua = window.navigator.userAgent;
       var msie = ua.indexOf("MSIE ");
       var isIE = (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)); 

    if((!isIE && $(this).val().length + 1 === parseInt($(this).attr("maxlength"))) || (isIE && $(this).val().length === parseInt($(this).attr("maxlength")))) {
       $(this).next().focus();
    } 
  });
}

它仍可在Chrome中使用,但在IE浏览器中,我会写入2个字符,光标会在框中继续显示。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

一般来说,问题是$(this).val()。length + 1的计算结果为true,你很难将它与int进行比较...对于Internet Explorer,如果总是如此... 。任何数字&gt; 0是真的。一种奇怪的行为。将其视为一个错误。

修复它的简单方法:

HTML:

<input type="text" class="autoTab" maxlength="2" /> :
<input type="text" />

JS:

$('.autoTab').on('keyup', function(e){
 if($(this).val().length == parseInt($(this).attr("maxlength"))){
     $(this).next().focus();
  }
});

这适用于Chrome,Opera和IE。

Live example

请注意,我在===语句中将==更改为if,并将事件切换为onkeyup