在一个HTML表单(由Reaction生成,但这并不相关)中,我有一个带有标签的复选框.复选框处于隐藏状态(不可见),选中/取消选中的方法是单击标签.目前,我已经设置了tabindex,以便标签在前一个表单控件之后成为焦点.然而,我找不到一种方法来让用户仅使用键盘选中/取消选中该复选框,即使标签处于焦点位置.有谁知道怎么做吗?基本上,我希望有一种方法来实现使用only the keyboard,这通常是clicking the label通过鼠标选中/取消选中复选框来完成的.

以下是我使用的代码的基本思想:

注意:我已经添加了一个小的js代码片段,用于在更改复选框时将复选框的状态记录到控制台.

document.getElementById("hidden-checkbox").onchange = function () {
    console.log(document.getElementById("hidden-checkbox").checked);
}
#hidden-checkbox {
    display: none;

    /* Could also use:
    position: absolute;
    clip: rect(1px, 1px, 1px, 1px);
    padding: 0;
    border: 0;
    height: 1px;
    width: 1px;
    overflow: hidden;
    */
}
<div class="fields">
    <input type="text" id="other-field" tabindex="1">
    <input type="text" id="other-field-2" tabindex="2">
    <input type="checkbox" id="hidden-checkbox" tabindex="-1">
    <label id="label" for="hidden-checkbox" tabindex="3">Click this to toggle!</label>
</div>

推荐答案

您可以继续使用您的概念,即从Tab键顺序中删除实际的复选框,并使标签在其位置可聚焦,但请注意:

  • 你不能用空格键来判断/取消判断,也不能免费输入按键行为.你必须自己go 实施它.
  • 您必须在标签上使用ARIA来向屏幕阅读器指示它是一个复选框及其状态,否则屏幕阅读器用户不会知道它

但是,您可以通过让复选框通常可聚焦来做得简单得多.空格键和回车键可以在不需要你做任何特殊操作的情况下工作. 屏幕阅读器用户将找到它,并将能够像往常一样判断它.对他们来说,这只是一个普通的复选框.不需要ARIA.

因为实际的复选框在屏幕上是不可见的,所以您可以使用一些css或js来向用户指示选中状态以及它何时具有焦点. 你肯定已经在做这件事了,至少是为了这个州,所以这不应该是什么大事.

Html相关问答推荐

HTML横幅未正确对齐页面顶部

后续使用收件箱从网页表中提取值

由于列中的图像,它们不会随FlexBox中的窗口大小进行调整

如何实现弯曲的梯形导航栏?

浏览器是在调整大小还是在全屏上交换视频源?

react :事件和转发器在特定代码段中不起作用

高度:适合-内容不拉伸以适合内部长度

带有图像的虚线边框

配置了 HTML 视口的 Google Apps 脚本移动网络应用程序无法正确显示

网格项未在同一行上对齐

margin-top 未应用于无序列表的第一项

如何在CSS伪类函数中使用复合 Select 器:host-context()

当我将有序列表居中时,数字会跑到列表的另一行

这两个CSS中的网格居中对齐内部盒子有什么区别?

使用 calc 函数设置字体大小时 Flexbox 项目重叠

HTML、CSS设计图像出格

如何让一个 div 元素粘在另一个元素上?

如何动态调整彼此重叠的两个 div 的大小,使它们在增长时保持相同的高度

有没有办法使用 CSS border-radius 创建 HTML 视频标签的三角形显示?

CSS:如何在模糊的背景上剪切文本?