我有一个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个字符,光标会在框中继续显示。
我该如何解决?
答案 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。
请注意,我在===
语句中将==
更改为if
,并将事件切换为onkeyup
。