2013-01-23 83 views
0
<DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en"> 
<head> 
    <script src="../js/third_party/jq142unmin.js"></script> 
    <script> 
     $(document).ready(function(){ 
      $("#set_focus1").click(function(){ 
       console.log($("#input1").focus()); 
      }); 
      $("#set_focus2").click(function(){ 
       console.log($("#input2").focus()); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <input id="input1"></input> 
    <input id="input2"></input> 
    <button id="set_focus1">Set Focus1</button> 
    <button id="set_focus2">Set Focus2</button> 
</body> 
</html> 

为什么focus()不像它应该那样工作?

代码本身就像我觉得应该,例如,点击设置集中在一个输入或其他的按钮。但是,如果我从控制台尝试同样的事情,它不起作用(没有错误消息,只是没有做任何事情)。我尝试了几种不同的方式,如上所示。

在控制台上对这些输入元素执行的其他jQuery函数,例如。 $(“#input1”)。val(“foo”),像我所期望的那样工作。 focus()有什么不同?

+2

所以代码的工作原理与设置焦点时一样,但是当您从控制台运行它时,它什么也不做?你在做什么? .focus()的工作原理 - 如前所述 – Amd4632

+2

当您输入焦点时,焦点停留在控制台上。它不能移动到浏览器窗口。 JavaScript代码只能将焦点从浏览器窗口的一部分移到另一部分。 –

+0

问题应该是“为什么xxx不能在控制台中工作”。答案是:不要打扰 – Peter

回答

1

我刚刚重现了这一点,它不是一个错误,它只是浏览器如何处理您的输入。在使用开发人员工具时,页面没有网线,因此不会将其传递到其他元素。

该元素事实上得到“专注”。在您的浏览器中运行此操作,您将看到focus()事件确实会触发,但是如果您注意另一个窗口,浏览器不会强制将您更改为该页面。

$("#input1").on("focus", function(){ alert("focused") }); 
$("#input1").focus(); 

这会触发警报。

+0

这是一个很好的解释和建议,谢谢你花时间回复。 – GregT

0

控制台与浏览器窗口是分开的。所以当你在控制台中执行一些命令时,焦点不会移动到html窗口。这就是为什么你没有得到预期的结果。

$("#input1").val("foo")正在设置DOM元素的值。所以它会改变这个值并将光标保存在控制台中。

要验证$("#input1").focus()您可以在焦点事件中放置警报,然后从控制台调用事件。

相关问题