【问题标题】:Focus is not working in IE even after adding much delay即使添加了很多延迟,焦点也无法在 IE 中工作
【发布时间】:2017-02-01 06:11:30
【问题描述】:

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

我在 IE 中遇到了类似的问题,但即使添加了很多延迟200,这在我的应用程序中也没有按预期工作。输入框只是间歇性地获得焦点,即使页面在 IE 中呈现,它也会跳过关注输入字段。我还尝试从$(document).ready(function(){ 和$(window).load(function() { 调用setTimeout 函数,如下所示,但没有成功。

当我在本地测试它并作为纯 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>

【问题讨论】:

    标签: javascript html internet-explorer dom


    【解决方案1】:

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

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

    &lt;body onload="document.getElementById('testfocus').focus();"&gt;

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

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

    <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】:

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

      上面代码下方的“运行代码 sn-p”按钮是否工作/不工作?

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

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

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

      【讨论】:

        【解决方案3】:

        此外,如果目标只是在页面加载时聚焦特定元素,您可以为其添加 autofocus 属性。然后它会自动对焦而不需要JS。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-05
            • 2020-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-19
            • 1970-01-01
            相关资源
            最近更新 更多