Javascript 焦点不在';我不在IE工作

Javascript 焦点不在';我不在IE工作,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有以下功能 function change() { var input = document.getElementById('pas'); var input2 = input.cloneNode(false); input2.type = 'password'; input.parentNode.replaceChild(input2,input); input2.focus(); } 但是focus()! 我

我有以下功能

 function change() 
 {
       var input = document.getElementById('pas');
       var input2 = input.cloneNode(false);
       input2.type = 'password';
       input.parentNode.replaceChild(input2,input);
       input2.focus();
  }
但是
focus()!
我想把光标放在输入框里面

谢谢

更新
非常好的解决方案,谢谢,但现在它在opera中不起作用:(

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

对于IE,您需要使用settimeout函数,因为它是惰性的,例如:

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

对于opera,这可能有助于:

更新

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

setTimeout(

function( ) {

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

}

, 10 ) ;

使用jQuery非常容易,但不知道为什么要这样做:) 在本例中,我为输入字段分配了一个类,我想要初始焦点集initFocus。可以使用任何要查找元素的选择器。根据您的代码,我将使用$(“#pas”).focus()


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

看看下面的例子,试一试,它对我很有用。
我们遇到了同样的问题。对于聚焦,我们使用的是通用函数,该函数应用了以下内容中提到的settimeout解决方案: 100毫秒

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

我注意到的是,当你有焦点,而没有指针时,你可以通过按TAB键(焦点在下一个元素上)和SHIFT+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上测试,以防您希望在表格最后一行的第一个输入元素中设置焦点。我保存表格的div的名称是tableDiv,我正在将焦点设置为最后一行的第一个inputtext

setTimeout(function(){                
    $($('#tableDiv  tr:last').find('input[type=text]')[0]).focus();
},2);

@博扬·塔迪奇谢谢你

下面的代码成功了:)

我认为当您使用输入和占位符时会出现问题。多亏了这个答案,我才解决了这个问题,我错过了$(body.focus)。使这段代码只在IE上运行,这样我的所有输入都可以通过“tabbing”自由访问。以前,当我的输入只有tabIndex时,我可以移动到下一个,但焦点不完整,无法在其中写入任何内容

这是完整的代码

$('input[name^="someName"]').on('keydown', function(e){
    var keyCode = e.which || e.keyCode;
    if(keyCode === 9){
        e.preventDefault();
        $('body').focus();
        var nextTabIndex = parseInt($(this).attr("tabIndex"));
        nextTabIndex++;
        setTimeout(function(){$('input[tabIndex=' + nextTabIndex +']')[0].focus();},20);
    }
});

@Kangkan也许通过javascript或jquery我可以丰富它?@Syom:我试过javascript,但不是@zaf所展示的方式@扎夫:谢谢。这是一个很好的方法。@zaf是的,伙计,它很好用;)但现在我没有意识到,它在opera中不起作用:)用一个可能的解决方案更新了我的答案。让我们知道它是否对您有效。我喜欢简单的“因为它很懒”解释:)您如何建议使此解决方案更具动态性,以适应页面的不同加载时间?@Zaf,谢谢,这最终是解决方案。有趣的是,在IE中对我有效,而且总是。。。。是的,刚刚在IE9、8和7中试用过。他们每个人都工作过。确保你的选择器实际选择了你想要设置焦点的输入字段。IE对我来说也不起作用。但我知道其他网站使用$(“.something”).focus();同样,我在IE7中遇到了这个问题。此外,如果类
.initFocus
中有多个元素,那么您希望它“关注”哪一个?如果您有多个元素,您试图设置焦点,我认为它只是忽略了请求。您可能希望解释您的答案,因为OPA是一个没有人实际使用的好东西
setTimeout(function(){                
    $($('#tableDiv  tr:last').find('input[type=text]')[0]).focus();
},2);
$('body').focus(); //First focus on random element
$('input[name^="someName"]').on('keydown', function(e){
    var keyCode = e.which || e.keyCode;
    if(keyCode === 9){
        e.preventDefault();
        $('body').focus();
        var nextTabIndex = parseInt($(this).attr("tabIndex"));
        nextTabIndex++;
        setTimeout(function(){$('input[tabIndex=' + nextTabIndex +']')[0].focus();},20);
    }
});