聚焦
不同于 HTML 文档中的其他元素,表单字段可以获取键盘焦点。当点击或以某种方式激活时,他们会成为激活的元素,并接受键盘的输入。
因此,只有获得焦点时,你才能输入文本字段。 其他字段对键盘事件的响应不同。 例如,<select>
菜单尝试移动到包含用户输入文本的选项,并通过向上和向下移动其选项来响应箭头键。
我们可以通过使用 JavaScript 的focus
和blur
方法来控制聚焦。第一个会聚焦到某一个 DOM 元素,第二个则使其失焦。在document.activeElement
中的值会关联到当前聚焦的元素。
<input type="text">
<script>
document.querySelector("input").focus();
console.log(document.activeElement.tagName);
// → INPUT
document.querySelector("input").blur();
console.log(document.activeElement.tagName);
// → BODY
</script>
对于一些页面,用户希望立刻使用到一个表单字段。JavaScript 可以在页面载入完成时将焦点放到这些字段上,HTML 提供了autofocus
属性,可以实现相同的效果,并让浏览器知道我们正在尝试实现的事情。这向浏览器提供了选项,来禁用一些错误的操作,例如用户希望将焦点置于其他地方。
浏览器也允许用户通过 TAB 键来切换焦点。通过tabindex
属性可以改变元素接受焦点的顺序。后面的例子会让焦点从文本输入框跳转到 OK 按钮而不是到帮助链接。
<input type="text" tabindex=1> <a href=".">(help)</a>
<button onclick="console.log('ok')" tabindex=2>OK</button>
默认情况下,多数的 HTML 元素不能拥有焦点。但是可以通过添加tabindex
属性使任何元素可聚焦。tabindex
为 -1 使 TAB 键跳过元素,即使它通常是可聚焦的。