首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery focus()有时在IE8中不起作用

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

Stack Overflow用户
提问于 2009-08-25 09:00:56
回答 6查看 35.2K关注 0票数 16

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

问题是调用focus()在IE6和FF3.5中工作得很好,但在IE8中就不行了。

我试图为这个问题做一个简单的工作示例,以便在这里展示它,但是使用代码焦点()的精简版本可以很好地工作。所以我猜测当我在IE8中调用focus()时,DOM还没有准备好。为此,我尝试调用setTimeout('myFocus()',400)。我取得了成功,在某些情况下,focus确实起到了作用,但仍然不总是如此。随机地,它不会聚焦我的输入域。

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

提前使用Tnx

编辑: 26.08.2009

在简单示例中成功重现。下面是在IE8上重现此错误的HTML+JS代码。

代码语言:javascript
复制
<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)从第一个下拉列表中选择值。您将看到first time input正在工作2)从second下拉菜单中选择value。您将看到该错误被重现。

然后,在代码中,您可以注释掉显示JS alert()的行。奇怪的是,如果有alert(),那么在它之后,focus就可以正常工作了。

希望这能帮助你理解我的问题所在。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-12-10 23:43:49

奇怪的是,我遇到了同样的问题,并使用简单的旧javascript解决了它,如下所示:

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

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

票数 6
EN

Stack Overflow用户

发布于 2010-08-25 09:14:24

我的应用程序也有类似的问题,但我不能在你的代码中重现焦点问题。我的问题略有不同,因为我的页面有一个链接散列,这使得IE不给我的元素焦点。

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

代码语言:javascript
复制
setTimeout(function () {
  $('.my-thing').focus();
}, 100);

用户不会注意到这一点,但它给了IE一个喘息的机会。

票数 30
EN

Stack Overflow用户

发布于 2013-07-26 02:32:15

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

代码语言:javascript
复制
$("elem").blur();
$("elem").focus().focus();

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

编辑:我发现调用.show()和.select()也会有所帮助。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1326993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档