焦点在IE中不起作用

时间:2010-04-08 13:29:11

标签: 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()在ie7中不起作用,所以我能做些什么! 我希望将光标放在输入内!

谢谢

更新

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

8 个答案:

答案 0 :(得分:34)

对于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 opera

答案 1 :(得分:2)

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

仍然在某些屏幕上它无法正常工作。特别是当包括iframe时。 还有另一个已知和类似的IE问题:
IE 9和IE 10不能不时地将文本输入到输入文本框中 - > IE 9 and IE 10 cannot enter text into input text boxes from time to time

我注意到当你有焦点,没有指针时,你可以通过按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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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);
}

答案 5 :(得分:0)

如果您要在表的最后一行的第一输入元素中设置焦点。我保存表的div的名称为 tableDiv ,并且我将焦点设置到最后一行的第一< strong> inputtext

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

答案 6 :(得分:0)

@Bojan Tadic谢谢!

下面的代码起到了作用:)

$('body').focus(); //First focus on random element

我认为当您使用输入和占位符时出现问题。设法解决了这个问题,这要归功于这个答案,我错过了$(body).focus。使此代码仅在IE上运行,以便可以通过“制表键”自由访问我的所有输入。以前,当我在输入中仅使用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);
    }
});

答案 7 :(得分:-2)

使用jQuery非常容易,不知道为什么你这么做很难:) 在这个例子中,我有一个分配给输入字段的类,我希望初始焦点集称为initFocus。您可以使用任何想要查找元素的选择器。从你的代码我会使用$(“#pas”)。focus();

$(".initFocus").focus();
相关问题