焦点在 IE 中不起作用

IT技术 javascript jquery html css
2021-02-08 12:29:19

我有以下功能

 function change() 
 {
       var input = document.getElementById('pas');
       var input2 = input.cloneNode(false);
       input2.type = 'password';
       input.parentNode.replaceChild(input2,input);
       input2.focus();
  }

focus() 在 ie7 中不起作用,那我该怎么办!我想让光标在输入里面!

谢谢

更新

很好的解决方案,谢谢,但现在它在歌剧中不起作用:(

6个回答

对于 IE,您需要使用 settimeout 函数,因为它很懒惰,例如:

setTimeout(function() { document.getElementById('myInput').focus(); }, 10);

来自http://www.mkyong.com/javascript/focus-is-not-working-in-ie-solution/

对于歌剧,这可能会有所帮助: how to set focus in required index on textbox for 歌剧

更新

以下代码片段处理元素不可用并在短时间内重试的情况 - 非常适合加载缓慢的页面和/或直到一段时间后才可用的元素。

setTimeout(

function( ) {

    var el = document.getElementById( "myInput" ) ;
    ( el != null ) ? el.focus( ) : setTimeout( arguments.callee , 10 ) ;

}

, 10 ) ;
用可能的解决方案更新了我的答案。让我们知道它是否适合您。
2021-03-16 12:29:19
您如何建议使此解决方案对不同的页面加载时间更具动态性?
2021-03-17 12:29:19
我喜欢直截了当的“因为它很懒惰”的解释:)
2021-04-02 12:29:19
@Zaf,谢谢,这最终成为解决方案。
2021-04-06 12:29:19
@zaf 是的,伙计,它工作正常;) 但现在我注意到,它在歌剧中不起作用:)
2021-04-07 12:29:19

我们遇到了同样的问题。为了聚焦,我们正在使用 General 函数,该函数应用了以下提到的 settimeout 解决方案:http ://www.mkyong.com/javascript/focus-is-not-working-in-ie-solution/ 100 毫秒。

仍然在某些屏幕上它不能正常工作。特别是当包含 iframe 时。还有一个已知的类似 IE 问题:
IE 9 和 IE 10 有时无法在输入文本框中输入文本 -> IE 9 和 IE 10有时 无法在输入文本框中输入文本

我注意到的是,当你有焦点时,没有指针,你可以通过按 TAB 键(焦点在下一个元素)而不是 SHIFT+TAB 来应用解决方法,这将返回到我们的目标元素并带有焦点并键入指针。为了确保我们可以输入内部输入,我们专注于随机元素,然后是我们的目标输入。

$('body').focus();
n.focus();

因此,我们在 javascript/JQuery 中的常规焦点功能中应用了相同的解决方案。所以有一个 if 语句

...        
if($.browser.msie) {
    setTimeout(function() { try {
        $('body').focus(); //First focus on random element
        $(n).focus(); //Now focus on target element
    } catch (e) { /*just ignore */ } }, 100); //See http://www.mkyong.com/javascript/focus-is-not-working-in-ie-solution/
} else { //Standard FF, Chrome, Safari solution...
...

可以肯定的是,由于存在较大的回归,我们仍然保留使用 settimeout 作为备份的解决方案。在 IE10、IE11、Firefox 45、Chrome 49.0.2623.87 上测试

IE7 不支持该focus()方法。我没有看到任何方法。

@Kangkan 也许通过 javascript 或 jquery 我可以丰富它?
2021-03-28 12:29:19
@Syom:我尝试过 Javascript,但不是@zaf 所示的方式。@zaf:谢谢。一个不错的方法。
2021-04-06 12:29:19

我遇到了同样的问题,并且通过创建 SetInitialFocus 函数并在我的 PageLoad 函数中调用它,能够让 IE 使用隐藏的代码工作。

看看下面的例子并试一试,它对我有用。 http://www.cambiaresearch.com/c4/df9f071c-a9eb-4d82-87fc-1a66bdcc068e/Set-Initial-Focus-on-an-aspnet-Page.aspx

function change() {
    var input = document.getElementById('pas');
    var input2 = input.cloneNode(false);
    input2.type = 'password';
    input.parentNode.replaceChild(input2, input);
    setTimeout(function () {
        input2.focus();
    }, 10);
}
为了OP的利益,您可能想解释您的答案
2021-04-09 12:29:19