jQuery焦点命令在Chrome命令行中无法工作

24
如果我的文本页如下所述。在头部的$()部分中调用$("#target").focus();是有效的。我也可以将该命令绑定到更现实的页面事件中。
然而,如果我打开chrome控制台并输入 $("#target").focus(); 它不会改变焦点。如果我运行$("#target").val("something");它会更改屏幕上的值,但无法使焦点工作。
显然这不是一个关键问题,但我真的很好奇为什么会发生这种情况。有人有想法吗?
<html>
  <head>
    <script src="jquery-1.9.1.js"></script>
    <script>
      $(function(){
         $("#target").focus();
      });
    </script>
  </head>

 <body>
   <input id="target" type="text">
 </body>
</html>
3个回答

37

当你点击Chrome控制台时,你会发现它会从当前页面中的任何输入或文本区域控件中夺取焦点,反之亦然。这是因为Chrome控制台实际上是使用与任何其他HTML页面相同的HTML控件实现的,只不过具有特殊属性,例如防止Chrome递归检查Chrome控制台。

当您在Chrome控制台中键入命令时,即在Chrome控制台的输入控件中键入命令时,它将保持焦点。Chrome工程师可能选择以不同的方式实现它,但在大多数情况下,用户会希望在触发命令后继续在Chrome控制台中输入,因此没有任何命令会释放控制台的焦点。


2
如果您在使用Windows时单击页面选项卡,使Chrome窗口处于活动状态,则您尝试从控制台focus()的元素现在应该具有焦点。我遇到了同样的问题,并发现它确实在页面内传递了焦点,但由于您技术上处于不同的窗口中,因此它并不会显示出来。 - asifrc
@asifrc 在我的Mac 10.8.2上,使用Chrome 24.0.x没有出现这种情况。 - nikola
是的,我之前不太确定,但根据我的经验,在Windows上是正确的(我更新了我的先前评论)。 - asifrc
4
太惊人了!我刚刚花了很多时间在控制台中测试 .focus(),结果它不起作用,让我感到非常沮丧。谢谢你! - Ziggy

0
可能的方法是:取消焦点/模糊您的控制。将其滚动到视图之外。在Chrome控制台中输入命令以获得焦点。如果网站随后向上滚动到您的控件,则可以确定焦点方法有效。

0

有点hackish但是可行...

尝试用setTimeout :D包装您的高亮代码,并在计时器到期之前单击网页。

ele2 = $('#input')
setTimeout(function(){ele2.focus()},4000);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接