jQuery的焦点()有时不是在IE8工作(jQuery focus() sometimes not

2019-06-19 00:30发布

我使用jQuery开发Web应用程序。 我有功能,增加了3个输入字段的新行。 创建这些DOM元素后,我想重点投入的领域之一。 我与呼吁必要的输入域jQuery的焦点()函数做这件事。

问题是,调用焦点()在IE6和FF3.5工作得很好,但在IE8无法正常工作。

我试图让这个问题在这里展示它的简单工作的例子,但与)的代码重点剥离的版本(是工作的罚款。 所以我的猜测是,DOM还没有准备好,当我打电话的IE8焦点()。 为此,我打过电话的setTimeout( 'myFocus()',400)。 我取得了成功,并在某些情况下,重点是真正的工作,但仍然并非总是如此。 随机它并不注重我的输入字段。

问题是:有没有人遇到过类似的问题,没有任何人有任何想法如何来解决办法呢? 使用的setTimeout感觉非常难看的解决方法。

TNX提前

编辑:2009年8月26日

成功复制的简单例子。 下面是转载了IE8这个bug HTML + JS代码。

<html>
<head>
    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
        function performChanged() {
          formChanged = true;
        }

        function handleChange() {
          var parentDiv = $('#container');
          newValue = $(html).html();

          parentDiv.html(newValue);
          $(".sel1",parentDiv).bind('change',handleChange);
          //alert('Uncomment this and after alert focus will be on input');
          $("input.cv_values",parentDiv).focus();
        }

        $(document).ready(function() {
          $('.trackChange').bind('change', handleChange);
        });
        var html = '<div class=\"div1\">\n<select class=\"sel1\" id=\"sel1\" name=\"sel1\"><option value=\"\"><\/option>\n<option value=\"11\">Select me to see problem<\/option>\n<\/select>\n\n\n<input class=\"cv_values\" id=\"sel3\" name=\"sel3\" size=\"30\" type=\"text\" value=\"\" /><br/>Focus should in input field. With alert it is but without alert focus is not there</div>';
    </script>
</head>
<body>
    <select class="trackChange" onchange='performChanged();'>
      <option value=""></option>
      <option value="1" >Select me to generate new inputs</option>
    </select>

    <div id="container"></div>
</body>

重现:1)从第一下拉选择值。 你会看到,第一次输入工作2)从第二个下拉选择值。 你会看到,错误的重现。

然后,在代码中你可以注释掉行,其中它显示JS警报()。 奇怪的是,如果有此警报(),然后后重点工作正常。

希望这有助于理解其中,我的问题是。

PS我需要我的应用程序,以这种方式工作 - 它是从下拉列表中选择值后再生的投入。 这是我的应用程序的简化的例子)。

Answer 1:

奇怪的是我有同样的问题,并使用普通的旧的JavaScript像这样解决的:

document.getElementById('friend_name').focus();

使用jQuery相当于$('#friend_name').focus(); 在IE8没有工作: - /



Answer 2:

我有我的应用程序类似的问题,但我不能与你的代码重现的焦点问题。 我的问题是在我的网页上有一个链接散列是由IE浏览器没有给我的元素焦点略有不同。

总之,要解决我加了一个超时的问题:

setTimeout(function () {
  $('.my-thing').focus();
}, 100);

用户并不明显,但它给IE片刻喘息。



Answer 3:

在与Kazys的解决方案的同时,我发现这个解决我的所有问题(使用IE8和.HTA文件):

$("elem").blur();
$("elem").focus().focus();

我不知道为什么,但不知何故一起呼吁焦点两次帮助IE。

编辑:我发现,调用.show()和。选择()也有帮助。



Answer 4:

也有类似的问题与IE8。 我想它打开时集中输入对话框。 二手的AutoOpen =假。 注意到,焦点不会在对话框中第一个聚焦元素才能正常工作。 试过的setTimeout但它的工作只是偶尔。 聚焦之前模糊元素帮助了我。

$('#dialog').find('#name').blur();
$('#dialog').find('#name').focus();


Answer 5:

既然你还没有发布任何代码,您使用的是:

$(document).ready(function(){
    //code here
});

这将使运行的JavaScript的HTML被加载后。

而且你应该使用现场活动也。 当您添加的投入到DOM中会自动具有焦点绑定到他们。

$("p").live("focus", function(){
   alert( $(this).text() );
});

这意味着,每一个创建则p必须绑定到它的焦点。



Answer 6:

这是暂时将焦点设置最佳的解决方案:

$( 'ELT ')淡入(200,函数(){$()聚焦()' ELT。';})。



Answer 7:

这是一个老问题,但它在搜索上面,所以想更新。

我不知道是否曾经有过,它是固定的一段时间,但我今天在IE11就遇到了这个问题再次,使用jquery-2.1.3。 我发现,包装在一个setTimeout的焦点调用,如设置了由Ponny以上,对我来说最好的工作。

我确实需要增加超时在某些情况下,要得到它的工作。



文章来源: jQuery focus() sometimes not working in IE8