Javascript 为什么focus()没有按它看起来应该的方式工作? $(文档).ready(函数(){ $(“#设置#焦点1”)。单击(函数(){ console.log($(“#input1”).focus(); }); $(“#设置#焦点2”)。单击(函数(){ console.log($(“#input2”).focus(); }); }); 设置焦点1 设置焦点2
代码本身的工作原理与我认为的一样,例如,单击按钮将焦点设置为一个输入或另一个输入。但是如果我在控制台上尝试同样的事情,它没有任何效果(没有错误消息,只是什么都不做)。我尝试了几种不同的方法,如上所示Javascript 为什么focus()没有按它看起来应该的方式工作? $(文档).ready(函数(){ $(“#设置#焦点1”)。单击(函数(){ console.log($(“#input1”).focus(); }); $(“#设置#焦点2”)。单击(函数(){ console.log($(“#input2”).focus(); }); }); 设置焦点1 设置焦点2,javascript,jquery,Javascript,Jquery,代码本身的工作原理与我认为的一样,例如,单击按钮将焦点设置为一个输入或另一个输入。但是如果我在控制台上尝试同样的事情,它没有任何效果(没有错误消息,只是什么都不做)。我尝试了几种不同的方法,如上所示 在控制台上对这些输入元素执行的其他jQuery函数,例如$(“#input1”).val(“foo”),工作原理与我预期的一样。focus()有什么不同?我只是复制了这个,这不是一个错误,只是浏览器如何处理您的输入。在开发工具中,页面没有十字线,因此不会将其传递给其他元素 事实上,元素确实会“聚焦”
在控制台上对这些输入元素执行的其他jQuery函数,例如$(“#input1”).val(“foo”),工作原理与我预期的一样。focus()有什么不同?我只是复制了这个,这不是一个错误,只是浏览器如何处理您的输入。在开发工具中,页面没有十字线,因此不会将其传递给其他元素 事实上,元素确实会“聚焦”。在浏览器中运行此操作,您将看到
focus()
事件确实会触发,但当您的注意力集中在另一个窗口上时,浏览器不会强制您更改该页面
<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>
这将触发警报。控制台与浏览器窗口分开。因此,当您在控制台中执行某些命令时,焦点将不会移到html窗口中。这就是为什么你没有得到预期的结果
$(“#input1”).val(“foo”)
正在设置DOM元素的值。因此,它将更改该值并将光标保留在控制台中
要验证
$(“#input1”).focus()
您可以在focus事件中放置一个警报,然后从控制台调用该事件。这样代码就可以像设置焦点一样正常工作,但当您从控制台运行它时,它什么也不做?你想干什么。focus()可以工作-正如前面所述,当您在控制台中键入内容时,焦点会停留在控制台上。它无法移动到浏览器窗口。javascript代码只能将焦点从浏览器窗口的一部分移动到另一部分。问题应该是“为什么xxx不能在控制台中工作”。答案是:不要打扰我,我实际上是想弄明白为什么我们必须设置焦点的一些框架代码不起作用;所涉及的错综复杂的代码太多,无法在这里发布,而控制台是我探索focus如何工作的一部分。谢谢你的反馈,干杯。这是一个很好的解释和建议,谢谢你花时间回复。
$("#input1").on("focus", function(){ alert("focused") });
$("#input1").focus();