表单必须使用<form>标签并设置method和action属性,method只能是小写的get或post,action不能为空;label需显式关联for与id;required属性须搭配aria-required="true";提交按钮必须为<button type="submit">或<input type="submit">。

表单必须有 <form> 标签且含 method 和 action
没有 <form> 标签,浏览器不会按表单语义提交数据;缺少 method(默认是 GET)或 action(哪怕只是 #),W3C 验证会报错。很多开发者只写 <input> 堆砌,忘了包裹容器。
-
method值只能是get或post(全小写),POST大写会触发验证失败 -
action不能为空字符串;若暂无后端,用action="#"或action="javascript:void(0)"更稳妥 - 不要用
<div>代替<form>—— 即使加了role="form",也不满足 HTML5 语义规范
<label> 必须显式关联 for 和 id,不能仅靠嵌套
仅靠把 <input> 放在 <label> 里(隐式关联)虽可工作,但部分屏幕阅读器兼容性差,W3C 推荐显式绑定。尤其 type="radio" 或 type="checkbox" 组,每个选项都得配独立 id 和 for。
-
<label for="email">邮箱</label><input id="email" name="email">✅ -
<label>邮箱<input name="email"></label>⚠️ 不推荐,W3C 不报错但无障碍不达标 - 多个复选框共用一个
name(如hobbies[]),但每个<input>的id必须唯一
必填字段要用 required,且搭配 aria-required="true" 提升兼容性
单纯加 required 属性能触发原生校验,但旧版读屏软件可能忽略它。W3C 推荐双保险写法,尤其面向政务、教育等强无障碍场景。
<input type="text" name="username" required aria-required="true">- 注意:不要写
required="true"——required是布尔属性,写成required="false"反而会被当成真值 -
required对type="hidden"无效,别乱加
提交按钮必须是 <button type="submit"> 或 <input type="submit"></H3>
<p>用 <code><div onclick="...">
或 <a href="#"> 模拟提交按钮,既无法被键盘 Enter 触发,也不被 W3C 认为是表单控件,会导致验证失败。
立即学习“前端免费学习笔记(深入)”;
- 优先用
<button type="submit">提交</button>—— 文本内容更易被读屏识别 - 避免
<button>提交</button>(缺type)—— 默认是type="submit",但显式声明更清晰、更防误改 - 禁用状态写
disabled,不是disabled="false";设为disabled后该字段值不会提交
真正容易被忽略的点是:所有 name 属性值必须是非空字符串,且不能只含空格;否则即使通过本地测试,W3C Validator 也会标记为 “attribute value cannot be empty”。



















