当前位置: 首页 > news >正文

第 70 篇:前端表单全解|原生 JS 表单校验、复杂联动、错误处理、防重复提交

前言

表单是前端业务占比最高的模块,新增、编辑、搜索弹窗全部离不开表单。很多同学只会简单判断非空,复杂联动、防重复提交、多字段联动、异步校验、错误聚焦处理经常踩坑。 本篇全部基于原生 JS+jQuery,不依赖任何 UI 组件库。

一、表单校验思路

  1. 基础校验:非空、长度、手机号、邮箱、数字范围
  2. 联动校验:A 输入框的值,影响 B 输入框是否显示、是否必填
  3. 异步校验:输入用户名,请求后端判断账号是否已存在
  4. 提交前整体校验,校验失败定位到第一个错误输入框
常用正则工具

js

运行

const Regs = { phone:/^1[3-9]\d{9}$/, email:/^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,}$/ }

二、完整表单校验示例

html

预览

<div> <div> <label>用户名</label> <input type="text" id="username"> <span class="error"></span> </div> <div> <label>手机号</label> <input type="text" id="phone"> <span class="error"></span> </div> <button id="submitBtn">提交</button> </div>

js

运行

//校验函数 function validateForm(){ let pass = true const username = $("#username").val().trim() const phone = $("#phone").val().trim() $(".error").text("") if(!username){ $(".error").eq(0).text("用户名不能为空") pass = false $("#username").focus() } if(!Regs.phone.test(phone)){ $(".error").eq(1).text("手机号格式错误") if(pass) $("#phone").focus() pass = false } return pass } //防重复提交:增加锁标记 let submitLock = false $("#submitBtn").on("click",async function(){ if(submitLock) return if(!validateForm()) return submitLock = true $(this).prop("disabled",true) try{ const params = { username:$("#username").val().trim(), phone:$("#phone").val().trim() } const res = await Request.post("/api/save",params) Component.toast("保存成功") }catch(err){ Component.toast("保存失败") }finally{ submitLock = false $(this).prop("disabled",false) } })

三、表单高频业务场景

  1. 防重复提交:点击按钮加锁,接口请求完成解锁,防止连续点击多次发请求。
  2. 联动显隐:选择下拉框的值,控制其他表单项显示隐藏,同时动态修改是否必填。
  3. 异步校验:失去焦点 blur 的时候调用接口校验,不要每输入一个字符就请求接口,配合防抖。

js

运行

$("#username").on("blur",Utils.debounce(async function(){ const val = $(this).val().trim() if(!val) return const res = await Request.get("/api/checkUser",{name:val}) if(res.code!==200){ $(".error").eq(0).text("账号已存在") } },400))
  1. 编辑回填:后端返回数据,循环赋值给表单,注意 null、undefined 空值处理。

四、表单踩坑总结

  1. input 获取值一定要 trim (),去除首尾空格。
  2. 异步校验不要写在 submit 里面,提交的时候只做同步校验。
  3. 一定要做提交锁,避免短时间多次提交。
  4. 校验失败自动 focus 定位到第一个错误输入,提升用户体验。

面试简答

Q:表单防重复提交有哪些方案?

  1. js 加锁,按钮置灰;
  2. 接口增加 token 令牌;
  3. 后端接口做幂等处理。

小结

中后台系统 70% 业务都是表单,把表单的各种边界处理做好,业务开发能力会直接上一个台阶。

http://www.cnnetsun.cn/news/3890421.html

相关文章:

  • 基于CAPL脚本实现LIN总线睡眠唤醒自动化测试的完整指南
  • 本地AI视频生成工具影控台1.2.0部署与API集成实践
  • JDBC外键与时间处理的实战解决方案
  • 如何免费获取数千个专业3D资产?Poly Haven Assets插件终极指南
  • 如何快速掌握线性代数:5种矩阵分解的完整可视化指南
  • 宁乡网站建设点燃网络:从传统制造到数字营销的本地化突围与未来展望
  • GEO工具怎么选?避开“技术贴牌”与“伪AI分析”的三个标准
  • SAP ABAP单位内外码转换:原理、函数与实战应用详解
  • Outfit字体终极指南:免费获取9种字重的专业无衬线字体
  • 终极MDCX Docker容器化部署指南:高效解决3大常见问题
  • 如何快速解决文件乱码:免费编码检测工具的完整教程
  • Outfit字体终极指南:9种字重免费获取现代无衬线字体解决方案
  • MySQL大数据量IN查询性能优化实战
  • 探秘张家口桥西区建设局网站:官方门户背后的城市变迁与民生温度
  • 完整指南:如何高效配置开源Uncle小说下载器与阅读器
  • 视频审核回调机制全解析:违规回调、全量回调与静默模式实战指南
  • 音乐商稿创作解析:从风格标签到制作实务的深度探讨
  • UE5批量材质替换:Python自动化脚本开发与实战指南
  • 走进桐城市美好乡村建设办公室网站:见证皖南古韵与新颜的完美融合之旅
  • ComfyUI-KJNodes深度解析:高效AI工作流扩展与性能优化终极指南
  • BrowserAct:为AI Agent赋予浏览器操作技能,实现智能Web自动化
  • Social-Auto-Upload:5分钟掌握全平台视频自动化发布技术
  • 基于Unity与状态机设计ASMR音频应用:从3D音效到沉浸式体验开发
  • 终极B站工具箱:如何用BiliTools的AI智能总结3分钟掌握视频精华
  • 网站建设费会计分录处理指南与企业税务筹划实务详解
  • 2026年pdf水印去除工具盘点:覆盖电脑网页端免费方案与识别风险说明
  • Axure中文语言包:3分钟免费安装,让专业原型设计工具说中文
  • 浏览器端Markdown渲染技术解析:Markdown Viewer架构设计与性能优化策略
  • 免费足球数据终极指南:如何用football.json摆脱API限制
  • 如何免费畅玩日文游戏:LunaTranslator视觉小说翻译工具终极指南