如何使用 JavaScript 将焦点设置在 HTML 表单中的元素上?

Posted

技术标签:

【中文标题】如何使用 JavaScript 将焦点设置在 HTML 表单中的元素上?【英文标题】:How can I set focus on an element in an HTML form using JavaScript? 【发布时间】:2013-07-04 06:06:38 【问题描述】:

我有一个带有文本框的网络表单。默认情况下如何将焦点设置到文本框?

类似这样的:

<body onload='setFocusToTextBox()'>

所以有人可以帮我吗?我不知道如何使用 javascript 将焦点设置到文本框。

<script>
  function setFocusToTextBox()
    //What to do here
  
</script>

【问题讨论】:

就像document.getElementById('your_text_box_id').focus();一样简单。 【参考方案1】:

不管怎样,您可以在兼容 html5 的浏览器上使用 the autofocus attribute。从版本 10 开始,甚至可以在 IE 上运行。

<input name="myinput" value="whatever" autofocus />

【讨论】:

请记住,这仅适用于页面首次加载时设置焦点;它不能用于稍后设置焦点以响应输入。 如果 ios Safari (caniuse.com/#search=autofocus) 恐怕 autofocus 属性不兼容,而 .focus() 只是与 Opera Mini (caniuse.com/#search=focus) 不兼容 请注意,如果您试图从控制台集中注意力,那么这是不可能的! 在使用带有autofocus 的输入的innerHTML 时也可以使用。【参考方案2】:

window.onload 最初是把焦点放在 onblur 是在您单击文本区域外部时聚焦,或避免文本区域 模糊

    <textarea id="focus"></textarea>
    <script>
     var mytexarea=document.getElementById("focus");
    window.onload=function()
    
   
    mytexarea.focus();
    
    
    

    </script>

【讨论】:

【参考方案3】:

如果您的&lt;input&gt;&lt;textarea&gt; 具有id=mytext 属性,则使用

mytext.focus();

function setFocusToTextBox() 
    mytext.focus();
<body onload='setFocusToTextBox()'>
  <form>
    <input type="text" id="mytext"/>
  </form>
</body>

【讨论】:

【参考方案4】:

如果您的代码是:

<input type="text" id="mytext"/>

如果你使用的是 JQuery,你也可以使用这个:

<script>
function setFocusToTextBox()
    $("#mytext").focus();

</script>

请记住,您必须先绘制输入$(document).ready()

【讨论】:

我对此投了反对票,因为在基本问题中根本没有 jQuery 的含义。 OP 希望保持纯粹的 javascript 好吧,你有理由,我错了,但我认为它还是有帮助的。 我赞成这一点,因为在已经使用 jQuery 并且将元素作为 jQuery 选择对象的项目中,最好是一致而不是使用 vanilla JS。 @Fallenreaper Downvotes 是针对egregiously sloppy, no-effort-expended post, or an answer that is clearly and perhaps dangerously incorrect,根据*** 的帮助中心。我发现这与这些类别相去甚远。帮助不限于OP,是吗? @GellieAnn 虽然这是一个答案,但它超出了 OPs 问题的范围。他使用 vanilla javascript 是有原因的,虽然您可以提及其他框架并给出指向或提示的提示并给出原因,但您仍然应该在所问问题的范围内解决答案。因此,我支持我的反对票。【参考方案5】:

我以前只用这个:

<html>
  <head>
    <script type="text/javascript">
      function focusFieldOne() 
        document.FormName.FieldName.focus();
      
    </script>
  </head>

  <body onLoad="focusFieldOne();">
    <form name="FormName">
      Field <input type="text" name="FieldName">
    </form>
  </body>
</html>

也就是说,您可以只使用 HTML 5 中的 autofocus 属性。

请注意:我想更新这个旧线程,显示所询问的示例,以及为仍在阅读本文的人提供更新、更容易的更新。 ;)

【讨论】:

【参考方案6】:

如前所述,document.forms 也可以。

function setFocusToTextBox( _element ) 
  document.forms[ 'myFormName' ].elements[ _element ].focus();


setFocusToTextBox( 0 );
// sets focus on first element of the form

【讨论】:

AFAIK 表单没有“名称”属性 表单拥有“名称”已经有很长时间了,在 HTML5 中,它们仍然如此。见w3.org/TR/html5/forms.html#the-form-element【参考方案7】:

通常当我们关注文本框时,我们也应该滚动到视图中

function setFocusToTextBox()
    var textbox = document.getElementById("yourtextbox");
    textbox.focus();
    textbox.scrollIntoView();

检查是否有帮助。

【讨论】:

如果字段不在屏幕上,这在较小的屏幕上可能会让人头疼:-) 如果你有一个固定的标题栏,你可能需要使用 textbox.scrollIntoView(false) 这只是将元素设置到底部而不是顶部。 这是更复杂页面的正确答案。【参考方案8】:

对于纯 Javascript,请尝试以下操作:

window.onload = function() 
  document.getElementById("TextBoxName").focus();
;

【讨论】:

【参考方案9】:

这样做。

如果你的元素是这样的..

<input type="text" id="mytext"/>

你的脚本是

<script>
function setFocusToTextBox()
    document.getElementById("mytext").focus();

</script>

【讨论】:

您必须使用 Web API 的其他部分(例如 Document.formsDocument.getelementsByTagNameNode.childNodes)扫描文档,并且依赖已知的文档结构或查找某些元素特定属性。 或者显而易见的答案...给它一个 ID ;) 我建议不要使用 ID,因为它被过度指定了。而是使用名称甚至类。在这种情况下,您将使用 document.querySelector("[name='myText']") 或 document.querySelector(".myText") 来获取对输入元素的引用。 @ChrisLove 有趣的建议。为什么有一个 id 被“过度指定”,它到底有什么问题?它更简单,更精确,定位它的代码会稍微快一点,有一个 ID。对我来说,这听起来是最明显和最明智的做法——如果可能的话。 @ChrisLove 这不是过度指定 CSS 选择器,而是设置 HTML ID 属性 - 特异性是 CSS 处理解析 DOM 选择器的方式的问题,而不是 ID 和类属性的问题在 HTML 中工作。不建议使用与附加 JS 相同的 DOM 选择器来附加 CSS,这意味着您可以保持您描述的差异

以上是关于如何使用 JavaScript 将焦点设置在 HTML 表单中的元素上?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Elm 中设置焦点?

将键盘选项卡焦点设置到页面顶部/使用 JavaScript / jQuery 重置键盘焦点

如何设置网页的默认输入焦点?

使用 Javascript 将焦点设置在选择元素上会将第一个项目滚动到视图之外

javascript中怎么设置文本框获得焦点

将焦点设置为 iframe 内容