如何将焦点设置为独立于id的HTML表单中的第一个输入元素?

spl*_*tne 83 html javascript forms focus

有没有一种简单的方法在加载页面时在第一个输入元素(文本框,下拉列表,...)上设置网页的焦点(输入光标)而不必知道元素的ID?

我想将它作为我的Web应用程序的所有页面/表单的通用脚本实现.

Jac*_*ley 129

虽然这不回答问题(需要一个通用脚本),但我知道HTML5引入'autofocus'属性可能对其他人有用:

<form>
  <input type="text" name="username" autofocus>
  <input type="password" name="password">
  <input type="submit" value="Login">
</form>
Run Code Online (Sandbox Code Playgroud)

深入了解HTML5有更多信息.

  • 在HTML5中,某些属性不需要具有值,"已检查"是另一个属性,在这种情况下.我相信当值保持不变时,暗示它与名称相同(例如autofocus ="autofocus"和checked ="checked"). (4认同)
  • autofocus是属性名称.它的价值怎么样?像autofocus那样的Somethig =真的不需要吗?不设置任何值意味着什么? (2认同)
  • @Geek与其他许多属性一样,autofocus属性是布尔属性类型.这就是为什么它仅以声明方式使用,而不是通过为其赋值.在w3c规范中查看更多详细信息:https://www.w3.org/TR/html5/infrastructure.html#boolean-attribute (2认同)

Mar*_*mic 96

您还可以尝试基于jQuery的方法:

$(document).ready(function() {
    $('form:first *:input[type!=hidden]:first').focus();
});
Run Code Online (Sandbox Code Playgroud)

  • 如果在这种情况下隐藏页面上的第一个表单会发生什么?或者,如果表单上的第一个元素是通过CSS隐藏的?当然这会失败.我当然是迂腐但这就是我的滚动方式. (2认同)

bob*_*nce 32

document.forms[0].elements[0].focus();
Run Code Online (Sandbox Code Playgroud)

这可以使用循环来改进,例如.不关注某些类型的字段,禁用字段等.更可能是一类="自动对焦"添加到你实际现场了形式要突出重点,循环[I] .elements [J]寻找那类名.

无论如何:在每个页面上执行此操作通常不是一个好主意.当您关注输入时,用户失去了例如.从键盘滚动页面.如果出乎意料,这可能很烦人,因此只有在您确定使用表单字段将成为用户想要做的事情时才会自动对焦.即.如果你是谷歌

  • 应该是正确的答案,因为问题没有jquery标签。 (2认同)

nge*_*eek 17

我发现最全面的jQuery表达式是(通过这里的帮助)

$(document).ready(function() {
    $('input:visible:enabled:first').focus();
});
Run Code Online (Sandbox Code Playgroud)


Sco*_*ans 11

我需要为在我的页面上的模态 div 中动态显示的表单解决这个问题,不幸的是,autofocus当通过更改属性显示包含的 div 时,我无法解决这个问题display(至少在 Chrome 中不是这样)。我不喜欢任何需要我的代码来推断我应该将焦点设置为哪个控件的解决方案,因为隐藏或零大小的输入等很复杂。我的解决方案是无论如何在我的输入上设置属性autofocus,然后在显示 div 时在代码中设置焦点:

form.querySelector('*[autofocus]').focus();
Run Code Online (Sandbox Code Playgroud)


Joh*_*ley 7

如果您正在使用Prototype JavaScript框架,那么您可以使用focusFirstElement方法:

Form.focusFirstElement(document.forms[0]);
Run Code Online (Sandbox Code Playgroud)


Gal*_*ian 6

这里有一篇可能有用的文章:将焦点设置为网页上的第一个输入


Mar*_*mic 5

您还需要跳过任何隐藏的输入.

for (var i = 0; document.forms[0].elements[i].type == 'hidden'; i++);
document.forms[0].elements[i].focus();
Run Code Online (Sandbox Code Playgroud)