Web可访问性:输入类型=提交的“按钮”

时间:2017-07-28 11:40:36

标签: accessibility wai-aria wcag web-accessibility

我有一些使用这样的提交butttons的表单: <input type="button" onclick="validateAndSubmit()">

他们工作正常,但是辅助功能检查器说表单中没有提交按钮,因为没有提交按钮。

我知道type =“button”清楚地表明它充当了一个按钮,但我不知道如何向辅助技术表明它在没有实际使用type =“submit”的情况下充当提交按钮。 (我宁愿不使用实际的提交按钮,因为意外的javascript错误会提交表单。当然你可以捕获错误,在这个意义上它只是不那么健壮,我想知道是否还有另一种方式。)

是否有ARIA角色或其他技术可以明确按钮提交表单(假设所有内容都有效)?

3 个答案:

答案 0 :(得分:3)

<button type="submit" onclick="validateAndSubmit()">Submit</button> 

应该做的伎俩。在这种情况下,不需要ARIA角色(button),因为此处使用的button是HTML规范中定义的。

答案 1 :(得分:1)

我不同意现有的两个答案。

确实,在表单中使用提交按钮并不是一项义务。 但是,如果您要提交表单,必须有提交按钮

按钮<input type="button" onclick="validateAndSubmit()">的弱点在于您必须单击此按钮才能触发该功能并提交表单。

但是,大多数用户都希望,在任何字段中按Enter键时提交表单,而不一定是提交按钮。 典型用例:键入您的电子邮件,选项卡,键入您的密码,然后直接按Enter键登录,而不是用鼠标点击&#34;登录&#34;或再按一次时间标签然后输入。

您的虚假提交按钮不允许这样做。您应该使用真实的提交按钮<input type="submit" />替换它,并使用表单上的提交事件(<form onsubmit="...">)。

如果您的问题是意外的JavaScript错误导致表单被提交错误输入,请不要忘记您必须再次检查输入服务器端。 为了以防万一,如果您通过AJAX提交并且如果您不确定您的代码,那么您完全可以使用try ... catch ... finally并在finally子句中执行event.preventDefault()绝不会引发错误;这不是一个糟糕的防御性编程解决方案。

答案 2 :(得分:0)

Form元素不需要submit按钮。没有这样的义务。

您使用的辅助功能检查器是错误的。

W3C在其文档中使用了一些没有提交按钮的表单示例:

  

Finally, to make the form submittable we use the button element: