即使添加了很多延迟,焦点也无法在IE中运行

时间:2016-09-23 11:36:05

标签: javascript html internet-explorer dom

此问题引用了此处发布的解决方案。 https://stackoverflow.com/a/2600261/5086633

我在IE中遇到了类似的问题,但即使添加了很多延迟200,这在我的应用程序中仍无法正常工作。输入框只是间歇性地聚焦,即使在IE中呈现页面之后,它也会跳过以关注输入字段。我还尝试按照下面的说明从setTimeout$(document).ready(function(){调用$(window).load(function() {函数,但没有成功。

当我在本地测试它并作为普通的html文件而不是在我的应用程序中时,此代码可以正常工作。

任何人都可以帮我修复/或提供IE中调试/此问题的线索,以便每次在IE中呈现页面时输入字段都会获得焦点吗?

脚注: - 它在Firefox中正常工作(没有延迟),在Chrome中focus需要很小的延迟才能工作。

 $(document).ready(function(){

    setTimeout(function() { document.getElementById('testfocus').focus(); }, 200);

});

$(window).load(function() {
 // executes when complete page is fully loaded, including all frames, objects and images
setTimeout(function() { document.getElementById('testfocus').focus(); }, 200);
});



setTimeout(function() { document.getElementById('testfocus').focus(); }, 200);

<html>
<head>
</head>
<body>
 
<input id="testfocus"/>

</body>
</html>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:1)

很奇怪。它对我有用......这不是一个很好的答案(win7,IE11,jquery 2.2.4)。您使用的是哪种特定的IE / OS / Jquery版本?

上面代码下方的“运行代码段”按钮是否有效?

这个jsfiddle怎么样:https://jsfiddle.net/u68gmzyc/

$(document).ready(function(){
    document.getElementById('testfocus').focus();
});

另外......你可以检查控制台是否有任何javascript错误消息?也许其他东西都失败了,副作用是你的代码实际上没有运行?

答案 1 :(得分:1)

https://stackoverflow.com/a/2600261/5086633适用于IE7。

每次在所有浏览器上都有效。

<body onload="document.getElementById('testfocus').focus();">

您可以看到favicon是否显示旋转圆圈(加载),因为只有在加载完成时才会发生焦点。

我尝试了以下适用于所有浏览器的内容:

<html>
<head></head>
<body onload="document.getElementById('testfocus').focus();">
 <iframe src="http://www.healthcarereformdigest.com/wp-content/uploads/2014/07/forms.jpg"></iframe>
<input id="testfocus"/>
</body>
</html>

(添加了iFrame和那个图像,因为它很重,需要加载才能加载)。

如果您的应用程序失败,您可以按Tab键查看哪个元素具有焦点,然后检查它,因为它可能有多个focus()语句。

答案 2 :(得分:1)

此外,如果目标只是将特定元素集中在页面加载上,则可以向其添加自动聚焦属性。然后它会自动聚焦而不需要JS。

<input type="text" autofocus="autofocus" id="testfocus" />

答案 3 :(得分:0)

修复了这个问题,我自己玩了这个焦点延迟功能,增加了它,并发现输入按钮在呈现页面时获得焦点setTimeout(function() { document.getElementById('testfocus').focus(); }, 200);但是,我不知道这个延迟的真正原因在IE和Chrome浏览器中是必需的。