表单需真实校验与语义化结构:blur/input时用setCustomValidity+reportValidity触发提示;email需正则校验;textarea设minlength和rows;按钮提交时禁用全部控件;用fieldset+legend分组;提交后重置表单并反馈状态。

表单必须包含 required 且校验逻辑要真实生效
浏览器原生 required 属性只在提交时触发,用户没碰过的空字段不会高亮提示——这会让反馈漏掉关键信息。实际使用中,应在用户离开字段(blur)或输入时(input)主动检查,并用 setCustomValidity() 配合 reportValidity() 控制提示时机。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 对
email类型输入框,额外用正则校验格式(input[type="email"]的原生校验太宽松,比如a@b也能过) - 文本域(
textarea)设minlength="10",避免“好”“不错”这类无意义反馈 - 提交按钮加
disabled状态,防止重复点击;校验通过后再启用
用 fieldset + legend 组织语义结构,别只靠 CSS 排版
单纯用 div 堆叠表单项,屏幕阅读器无法识别逻辑分组,对无障碍访问不友好。而 fieldset 是 HTML 原生的语义化分组容器,配合 legend 能明确表达“这是反馈内容区”“这是联系方式区”。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 把“问题描述”和“改进建议”放在同一
fieldset,用legend标为“您的反馈” - 把“姓名”“邮箱”“是否接受回访”归入另一
fieldset,legend设为“联系信息” - 避免嵌套
fieldset,多数场景一层足够;过度嵌套反而干扰辅助技术解析
提交后禁用整个表单,而不是只禁用按钮
仅给按钮加 disabled,用户仍可按回车提交、或用 DevTools 删除属性重发——这在真实反馈场景中可能造成重复请求甚至后端压力。更稳妥的做法是提交瞬间禁用全部可交互控件。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 监听
submit事件,在event.preventDefault()后执行:form.querySelectorAll('button, input, select, textarea').forEach(el => el.disabled = true) - 成功响应后,用
form.reset()清空内容,但不要自动刷新页面(破坏用户上下文) - 失败时需手动恢复控件可用性,并在表单顶部显示简明错误(如“网络异常,请重试”,而非后端原始报错)
textarea 默认行为要覆盖:禁止缩放 + 设置合理行数
默认 textarea 允许拖拽缩放,会破坏布局一致性;且未设 rows 时高度不可控,小屏设备可能只显示一行导致用户误以为输入框失效。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 全局 CSS 中加:
textarea { resize: vertical; min-height: 120px; }(允许纵向拉伸但限制最小高度) - HTML 中显式写
<textarea rows="4"></textarea>,比纯 CSS 更可靠,尤其在 JS 未加载时 - 避免
resize: none——完全禁用缩放会损害可访问性,部分视障用户依赖放大输入区域



















