我刚刚注意到,即使是谷歌也不使用表单来包装他们的输入字段。我认为这在可访问性方面很糟糕,因为屏幕读者不知道它是什么?
从纯屏幕阅读器的角度来看,拥有<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>
看起来文字"search"在代码片段中经常出现,但"search(搜索("必须真正出现的唯一时间是role
属性。
输入的aria-label
可以是您想要的任何字符串。这是当焦点移动到场上时,屏幕阅读器将读取的内容。如果您的<input>
有一个<label>
,则不需要aria-label
。
<button>
只有一个放大镜图标,没有文本,因此屏幕阅读器也需要aria-label
。如果您的图标是<img>
而不是<i>
,则可以在img的alt
属性中指定按钮的标签,在这种情况下,<button>
不需要aria-label
。
<div role="search">
<label for="findit">search term</label>
<input id="findit">
<button>
<img src="magnifier.jpg" alt="search">
</button>
</div>
所以简单的答案是,"不",你不必把你的搜索放在<form>
中。但强烈建议使用role="search"
将其封装在"搜索"里程碑中。
您不一定需要,但您应该始终使用表单标记从表单元素提交任何类型的数据,谷歌也会这样做(如果您在DOM中遍历,您会发现(。
不过,您可以使用AJAX提交数据,但不能在JavaScript未运行时提交。