gpt4 book ai didi

javascript - 谁能解释为什么 focus() 不总是在 IE 10 上工作?

转载 作者:行者123 更新时间:2023-11-29 09:52:55 25 4
gpt4 key购买 nike

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

为了响应不同的用户操作,屏幕上的某些对象会改变颜色或四处移动,这是由 Animate() 完成的,要设置动画的对象会添加到数组 (Sys.Anim) 中,并在动画结束时移除。为了保持一切顺利,如果页面在动画结束前准备好输入(这几乎总是发生),focus() 调用将延迟到动画结束,即大约 1/3一秒钟。

除 IE 10 外,所有浏览器都按预期工作。起初我以为我的代码有逻辑错误,但是我用开发者工具调试它,我发现所有步骤都正确执行,问题是focus() 实际上并不是一直有效。

另一个重要的细节......当focus()成功时email.onkeydown会在每次我按下一个键时执行,但是当focus() 失败 我显然必须单击输入控件以手动将其聚焦,但是当发生这种情况时,即使输入控件的内容随着每次按键而更新,也永远不会调用 email.onkeydown 函数。

我试过:

setTimeout(function(){obj.focus()},100);

这是作为这个问题的解决方案而提出的,但它并没有解决我的问题。

为什么会发生这种情况以及如何解决?

更新:

为了测试建议,我添加了以下函数:

email.onfocus = function(){
debugger
}

只有当focus()成功时才会引入调试器,如果focus()失败,即使手动聚焦输入控件也不会弹出调试器单击鼠标,因为在这种情况下,我根本无法使用 Tab 或 Shift-Tab 键聚焦输入控件...就像它不存在一样!!!

最佳答案

解决了!!!

经过大量令人沮丧的测试后,我发现输入控件嵌套在 DIV 中,在某些情况下该 DIV 被禁用,禁用 DIV 真是愚蠢。

...然而,所有其他浏览器只有在明确禁用输入控件时才会真正禁用它。微软的那些总是试图“太聪明”的人决定采取一种反直觉的方法,把事情搞砸了。

问题和我的提示是输入控件看起来没有被禁用,它看起来很正常,如果你点击它,插入符实际上会出现,你甚至可以在上面打字,不管它有多禁用应该是......所以为了记录,永远记住 IE 10 只有一半禁用了禁用 DIV 内的输入控件,让你看不到正在发生的事情。

关于javascript - 谁能解释为什么 focus() 不总是在 IE 10 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18535505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com