我有一些使用提交按钮的表单,如下所示:
<input type="button" onclick="validateAndSubmit()">
它们工作正常,但可访问性检查人员说表单中没有提交按钮,因为根本就没有。
我知道 type="button" 清楚地表明它充当按钮,但我不知道如何向辅助技术指示它专门充当提交按钮,而不实际使用 type="submit"。 (我宁愿不使用实际的提交按钮,因为意外的 JavaScript 错误将提交表单。当然,您可以捕获错误,只是从这个意义上来说不太健壮,我想知道是否还有其他方法。)
是否有 ARIA 角色或其他技术可以明确按钮提交表单(假设一切都验证)?
<button type="submit" onclick="validateAndSubmit()">Submit</button>
button
),因为此处使用的是 HTML 规范中定义的 button
。
我不同意现有的两个答案。
确实,表单中包含提交按钮并不是一项义务。 但是,如果您的表单要提交,必须有一个提交按钮。
您的按钮
<input type="button" onclick="validateAndSubmit()">
的弱点是您确实必须单击此按钮来触发功能并提交表单。
但是,在任何字段(不一定是提交按钮)中按 Enter 键时提交表单通常很有用,并且大多数用户都期望这样做。 典型用例:输入您的电子邮件、Tab 键、密码,然后直接按 Enter 登录,而不是用鼠标单击“登录”或再按一个 Tab 键并输入。
您的假提交按钮不允许这样做。您应该将其替换为真正的提交按钮
<input type="submit" />
并使用表单上的提交事件 (<form onsubmit="...">
)。
如果您的问题是意外的 JavaScript 错误导致提交的表单包含错误的输入,请永远不要忘记您必须再次检查输入服务器端。 为了以防万一,如果您通过 AJAX 提交并且不确定您的代码永远不会触发错误,那么您完全可以使用 try...catch...finally 并在 finally 子句中执行
event.preventDefault()
;这不是一个糟糕的防御性编程解决方案。
WCAG 不要求您有提交按钮。然而,wcag 上有推荐的技术,说你可以用它来满足规则 3.2.2。