2017-07-28 119 views
1

我有一些形式的使用提交butttons这样的: <input type="button" onclick="validateAndSubmit()">无障碍网页:输入类型=“按钮”即提交

它们工作得很好,但无障碍跳棋说没有形式提交按钮,因为有ISN一个。我知道type =“button”明确表示它作为一个按钮,但我不知道如何指示辅助技术,它专门用作提交按钮,而不实际使用type =“submit” 。 (我宁愿不使用实际的提交按钮,因为意外的javascript错误会提交表单。当然,您可以捕获错误,在这个意义上它只是不太健壮,我不知道是否有其他方法。)

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

回答

0

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

您使用的可访问性检查器是错误的。

W3C使用的形式一些例子,而不提交按钮在其文档中:

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

+0

这就是我想,但我们的一些客户使用SiteImprove,其报告和Chrome扩展标记与“缺少表单按钮”错误“的页面包含一个形式,但没有提交按钮。表单应该提供一个提交按钮以最大化可预测性。'它看起来好像是一个

+0

但是,具有onclick的按钮元素看起来与提交按钮具有相同的行为,因为如果click处理程序引发错误(不执行),它会提交。 – enigment

+0

SiteImprove是错误的。你可以完美地拥有一个没有'动作'做ajax其他东西的表单。如果你只想要满足你的客户盲目使用审计工具,只需添加一个提交按钮,并用CSS隐藏它。 – Adam

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

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

+0

参见[我的其他评论](https://stackoverflow.com/questions/45372598/web-accessibility-input-type-button-that-submits/45377720#评论-77717952)。 – enigment

0

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

确实,在表单中提交按钮并不是一项义务。 但是,如果您的表格有意提交,必须有一个提交按钮

你的按钮<input type="button" onclick="validateAndSubmit()">的弱点是,你真的有义务点击这个按钮来触发该功能并提交表单。

然而,在任何字段中按下回车键时(而不一定是提交按钮),表单通常是有用的,并且大多数用户期望。 典型用例:输入您的电子邮件,选项卡,输入您的密码,并直接按Enter键登录,而不是用鼠标点击“登录”或再次按下一次标签并输入。

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

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