小编Dem*_*eus的帖子

任何人都可以解释为什么focus()总是在IE 10上不起作用?

我有以下代码,在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)

javascript internet-explorer

3
推荐指数
1
解决办法
3872
查看次数

标签 统计

internet-explorer ×1

javascript ×1