请 Agent 修复表单:标签、键盘操作与有用的错误提示
本文目录
为表单修复任务明确三个具体结果:用户能识别每个字段、用键盘完成任务,并知道出错后如何恢复。提供表单状态与所需检查,而不是不描述交互,只让 Agent“把它做得无障碍”。
下面的虚构工作坊申请表提供了一个完整的小型标记案例。它关注字段命名、提交与错误恢复,而不是全面的视觉重设计。
从用户需要完成的表单开始
任务是用姓名、电子邮箱和可选备注申请工作坊。在最初的示例中,用户输入后就看不到字段名称,Send 方框不是原生按钮,错误消息也没有提供恢复指引。
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Workshop request</title></head>
<body>
<h1>Request a workshop</h1>
<form action="/workshop-requests" method="post">
<input name="name" placeholder="Name" value="">
<input name="email" placeholder="Email" value="sample@">
<textarea name="note" placeholder="Note">An afternoon session.</textarea>
<p style="color: red">Something went wrong.</p>
<div class="send-box">Send</div>
</form>
</body>
</html>
这是一份有意不完整的交互设计。请求应指出问题与需要保留的内容:保留三个字段及已输入值,让提交控件可用,并用针对具体字段的指引替换笼统错误。
给 Agent 一个目标错误状态
以下是同一虚构表单在提交无效数据后的原创标记提案。错误状态是编写出来的样例,不是服务器请求、浏览器测试或辅助技术测试的证据。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>2 errors — Workshop request</title>
<style>
label, input, textarea { display: block; }
input, textarea { max-width: 100%; }
:focus-visible { outline: 3px solid #175cc0; outline-offset: 3px; }
</style>
</head>
<body>
<main>
<h1>2 errors — Request a workshop</h1>
<section aria-labelledby="errors-title">
<h2 id="errors-title">Please correct these fields</h2>
<ul>
<li><a href="#request-name">Enter your name.</a></li>
<li><a href="#request-email">Enter a complete email address.</a></li>
</ul>
</section>
<form action="/workshop-requests" method="post">
<p>Fields marked required must be completed.</p>
<label for="request-name">Name (required)</label>
<input id="request-name" name="name" autocomplete="name"
required value="" aria-invalid="true"
aria-describedby="name-error">
<p id="name-error">Enter your name.</p>
<label for="request-email">Email (required)</label>
<p id="email-hint">We will use this address to reply to your request.</p>
<input id="request-email" name="email" type="email"
autocomplete="email" required value="sample@"
aria-invalid="true" aria-describedby="email-hint email-error">
<p id="email-error">Enter a complete email address, such as person@example.org.</p>
<label for="request-note">Note (optional)</label>
<textarea id="request-note" name="note">An afternoon session.</textarea>
<button type="submit">Request workshop</button>
</form>
</main>
</body>
</html>
/workshop-requests 动作是示意性的应用接口。你的应用仍需要自己的校验与提交处理器。用错误样例审阅拟议标记,再到真实应用中检查完整交互。
把每项修复与其目的对应起来
| 修复 | 本例中的确切关联 | 要检查什么 |
|---|---|---|
| 持续可见的字段标签 | 每个标签的 for 与控件的 id 匹配 |
输入后仍能识别 Name、Email 和 Note |
| 辅助说明 | Email 引用 email-hint |
说明属于正确字段 |
| 字段错误 | 无效字段引用自己的错误文字 | 用户能识别需要修改什么 |
| 整体反馈 | 标题与可点击摘要指出两个错误 | 返回页面说明是什么阻止了完成 |
| 提交 | 原生 button type="submit" |
键盘激活走表单的提交路径 |
| 保留输入 | 备注与无效邮箱继续可见 | 修改一个字段不需要重新填写整张表单 |
W3C 的标签教程说明了显式关联标签与控件的方法;其表单通知指南讨论了清楚易懂的整体反馈与字段反馈。上表将这些思路用于本案例,不是合规结论。
错误属性与消息必须反映实际状态。字段修正并被接受后,应用应移除过时错误状态。提交成功也需要准确的确认,而不是把错误标题留在屏幕上。
复制修复请求
根据给定的修改前标记和目标错误状态样例,修复工作坊申请表。
保留 Name、Email 和可选 Note 字段、它们提交时使用的名称,
以及校验失败时已经输入的值。
用明确可见的标签替换仅靠占位文字标识字段的方式。
用原生提交按钮替换视觉上的 Send 方框。
把提示与字段错误关联到对应控件。
提供能理解的返回错误标题和带链接摘要。
不要添加新 UI 框架,也不要改变请求中的业务字段。
解释初始、无效、已修正和成功状态的区别。
返回标记改动,以及键盘操作/错误恢复检查记录。
把预期行为与实际执行的检查分开。
使用实际结果留空的键盘走查表
走查前记录浏览器、操作系统、输入设置和确切页面状态。以下是拟进行的检查,不是本指南的测试结果。
| 步骤 | 预期检查 | 实际观察 |
|---|---|---|
| 打开错误样例 | 页面标题与主标题标明工作坊申请及其错误 | — |
| 使用 Tab 与 Shift+Tab 移动 | 交互元素具有清楚可用的焦点提示,顺序合理 | — |
| 激活每个摘要链接 | 到达对应字段;记录实际焦点行为 | — |
| 编辑 Name 和 Email | 标签持续可见,可选备注保持完整 | — |
| 在应用中提交修正后的数据 | 预期处理器执行,并返回准确的下一状态 | — |
| 让应用返回错误 | 适当的值与消息继续关联到对应字段 | — |
另外,使用实际支持的辅助技术组合检查输出:控件名称、必填状态、提示、错误,以及修正后的变化。记录观察,不要假定标记审阅就能证明每一次播报或焦点转换。
完成修复应得到可用的表单流程与可追溯的检查记录。修改前后标记为 Agent 划定改动范围;走查表则让你能实际检查结果,而不把一般性的无障碍请求扩展为没有边界的重设计。