jQuery focus()有时候在IE8中不起作用

osk*_*rae 16 javascript jquery internet-explorer-8

我正在使用jQuery开发webapp.我有添加3行输入字段的新功能.在创建这些DOM元素之后,我想要关注一个输入字段.我在必要的输入字段上调用jQuery focus()函数.

问题是调用focus()在IE6和FF3.5中工作正常,但在IE8中不起作用.

我试图在这里显示这个问题的简单工作示例,但使用剥离版本的代码focus()工作正常.所以我的猜测是,当我在IE8中调用focus()时,DOM还没有准备好.为此,我尝试调用setTimeout('myFocus()',400).我取得了成功,在某些情况下,重点确实在起作用,但仍然并非总是如此.随机它不会聚焦我的输入字段.

问题是:是否有人遇到类似的问题,是否有人知道如何解决它?使用setTimeout感觉非常难看的解决方法.

Tnx提前

编辑:26.08.2009

成功复制简单的例子.这是HTML + JS代码,它在IE8上重现了这个bug.

<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>
Run Code Online (Sandbox Code Playgroud)

要重现:1)从第一个下拉列表中选择值.您将看到第一次输入正在工作2)从第二次下拉列表中选择值.您将看到该错误被复制.

然后在代码中,您可以注释掉显示JS alert()的行.奇怪的是,如果有这个警报()然后它的焦点工作正常.

希望这有助于了解我的问题所在.

PS我需要我的应用程序以这种方式工作 - 它是从下拉列表中选择值后重新生成这些输入.这是我的应用程序的简化示例;).

Pon*_*nny 30

我的应用程序遇到了类似的问题,但我无法使用您的代码重现焦点问题.我的问题略有不同,因为我的页面有一个链接哈希,使IE不能给我的元素集中.

无论如何,为了解决这个问题我添加了一个超时:

setTimeout(function () {
  $('.my-thing').focus();
}, 100);
Run Code Online (Sandbox Code Playgroud)

用户不会注意到它,但它给了IE一个呼吸的时刻.


Max*_*hem 8

结合Kazys的解决方案,我发现这可以解决我的所有问题(使用IE8和.HTA文件):

$("elem").blur();
$("elem").focus().focus();
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但不知何故调用焦点两次有助于IE.

编辑:我发现调用.show()和.select()也可以提供帮助.


lmm*_*des 6

奇怪的是我遇到了同样的问题并使用普通的旧javascript解决了这个问题:

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

使用jQuery等效$('#friend_name').focus();在IE8中不起作用: - /

  • 这是您可能想要向jQuery基础报告的内容. (3认同)