我有以下代码,在Chrome和Safari上100%正常工作,但在IE 10上有时可以工作,有时则不行.
Sys.Focus = function(obj){
if(Sys.Anim.length>0){
Sys.Fp = obj;
return;
}
obj.focus();
}
.
.
.
function Animate(...){
var i,...
.
.
.
if(Finished(Sys.Anim[i])){
Sys.Anim.splice(i,1);
if(Sys.Anim.length==0){
if(Sys.Fp){
Sys.Focus(Sys.Fp)
Sys.Fp = null;
}
}
}
.
.
.
}
.
.
.
email = document.getElementById("email");
Sys.Focus(email);
email.onkeydown = function(){
debugger
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
响应于不同的用户动作,屏幕上的某些对象要么改变颜色要么四处移动,这是通过Animate()完成的,要动画的对象被添加到数组(Sys.Anim)并在动画结束时被移除.为了保持一切顺利,如果页面在动画结束之前准备好输入(几乎总是发生),则focus()调用会延迟,直到动画结束,即大约1/3秒.
除了IE 10之外,所有浏览器都能正常工作.起初我认为我的代码存在逻辑错误,但是我使用开发人员工具对其进行了调试,我发现所有步骤都正确执行,问题在于焦点( )实际上并不是一直都在工作.
另一个重要的细节......当focus()成功时,每次我按下一个键都会执行email.onkeydown,但是当focus()失败时,我显然必须点击输入控件来手动对焦,但是当发生这种情况时,email.onkeydown即使用每个按键更新输入控件的内容,也从不调用函数.
我试过:
setTimeout(function(){obj.focus()},100);
Run Code Online (Sandbox Code Playgroud)
这被提议作为解决这个问题的方法,但它并没有解决我的问题.
为什么会发生这种情况,如何解决?
更新:
对于测试建议我添加了以下功能:
email.onfocus = function(){
debugger …Run Code Online (Sandbox Code Playgroud)