【问题标题】:Do I need to wrap my input field in a form if it's just a search function?如果它只是一个搜索功能,我是否需要将我的输入字段包装在一个表单中?
【发布时间】:2018-08-04 18:33:05
【问题描述】:

我刚刚注意到,即使是 Google 也不使用表单来包装他们的输入字段。我认为这在可访问性方面很糟糕,因为屏幕阅读器将不知道它是什么?

【问题讨论】:

标签: html forms input accessibility


【解决方案1】:

从纯屏幕阅读器的角度来看,<form> 是将一组控件组合在一起的一种方式,如果您为表单指定标签,例如 <form aria-label="contact info">,则效果最佳。

如果您有一个简单的搜索字段,并且可能有一个关联的搜索按钮,则不一定需要 <form>。但是,您应该使用 role="search" 将您的元素嵌套在搜索地标中。

<div role="search">
  <input aria-label="search term">
  <button aria-label="search">
    <i class="magnifier"></i>
  </button>
</div>

看起来像文字“搜索”在该代码片段中出现了很多,但“搜索”唯一一次必须按字面显示是role 属性。

输入的aria-label 可以是您想要的任何字符串。当焦点移动到该字段时,屏幕阅读器将读取它。如果您的&lt;input&gt;&lt;label&gt;,则不需要aria-label

&lt;button&gt; 只有一个放大镜图标,没有文字,因此屏幕阅读器也需要aria-label。如果您的图标是&lt;img&gt; 而不是&lt;i&gt;,您可以在img 的alt 属性中指定按钮的标签,在这种情况下&lt;button&gt; 不需要aria-label

<div role="search">
  <label for="findit">search term</label>
  <input id="findit">
  <button>
    <img src="magnifier.jpg" alt="search">
  </button>
</div>

所以简单的答案是“不”,您不必将搜索放在&lt;form&gt; 中。但强烈建议使用role="search" 将其包装在“搜索”地标中。

【讨论】:

    【解决方案2】:

    您不一定需要,但您应该始终使用表单标签从表单元素提交任何类型的数据,谷歌也这样做(如果您在 DOM 中遍历,您会发现)。

    不过,您可以使用 AJAX 提交数据,但不能在 JavaScript 未运行时提交。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      相关资源
      最近更新 更多