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

标签 javascript jquery internet-explorer-8

我正在使用 jQuery 开发网络应用程序。 我有添加新行的 3 个输入字段的功能。创建这些 DOM 元素后,我想关注其中一个输入字段。我通过在必要的输入字段上调用 ​​jQuery focus() 函数来做到这一点。

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

我试图为这个问题制作一个简单的工作示例,以便在此处显示它,但是使用剥离版本的代码 focus() 工作正常。所以我的猜测是当我在 IE8 中调用 focus() 时 DOM 还没有准备好。为此,我尝试调用 setTimeout('myFocus()',400)。我取得了成功,在某些情况下,专注确实有效,但并非总是如此。它随机地不关注我的输入字段。

问题是:有没有人遇到过类似的问题,有没有人知道如何解决它?使用 setTimeout 感觉像是非常丑陋的解决方法。

提前发送

编辑:26.08.2009

在简单的例子上成功重现。这是在 IE8 上重现此错误的 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 alert() 的行。奇怪的是,如果有这个 alert() 那么在它之后 focus 工作正常。

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

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

最佳答案

我的应用程序也有类似的问题,但我无法用您的代码重现焦点问题。我的问题略有不同,因为我的页面有一个链接散列,使 IE 无法提供我的元素焦点。

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

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

用户不会注意到,但它给了 IE 喘息的时间。

关于javascript - jQuery focus() 有时在 IE8 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1326993/

相关文章:

javascript - 无法让 Google Plus 与其他社交媒体按钮保持一致

javascript - 取消委托(delegate)单个事件

html - 由于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不太满意?

javascript - jquery 改变 src 属性结束

javascript - 检查一个字符串在一个字符串中出现了多少次

javascript - LastIndexOf() 函数的替代方案

javascript - JQuery 隐藏/显示一个,而不是全部

javascript - 如何使用 Javascript 获取 CSS 宽度值?

javascript - 如何使用 Javascript 在 chrome 中禁用保存密码气泡?

jquery - IE8兼容性 View 出现问题?