0

0

javascript如何验证表单_有哪些验证技巧【教程】

幻影之瞳

幻影之瞳

发布时间:2026-01-27 17:41:02

|

383人浏览过

|

来源于php中文网

原创

HTML5原生验证仅作快速过滤,关键校验须JS实现:submit中preventDefault、checkValidity优先判断,异步验证需防抖+AbortController+按钮禁用,setCustomValidity统一管理提示。

javascript如何验证表单_有哪些验证技巧【教程】

HTML5 原生 requiredpattern 能解决大部分基础验证,但别全靠它

浏览器自带的表单验证(如 requiredtype="email"pattern)能拦截明显错误,触发 checkValidity()reportValidity(),但存在明显局限:样式不可控、提示文案无法本地化、Safari 对 pattern 支持不稳定、无法做异步校验(如用户名是否已存在)。实际项目中建议只用作第一层快速过滤,关键逻辑必须走 JS 手动验证。

常见错误现象:submit 事件里没调用 event.preventDefault(),导致表单直接提交跳转;或只监听 input 却忽略 blur,用户粘贴内容后未触发校验。

  • 对必填字段,优先用 required + JS 双重保障,避免绕过 HTML 验证提交空值
  • pattern 正则需注意:它匹配的是整个字段值(等价于 ^...$),写 pattern="[a-z]+" 时用户输 "abc123" 会失败
  • 移动端 Safari 中,type="number" 可能触发数字键盘但允许输入字母,不能替代 JS 类型判断

addEventListener('submit') 统一拦截,而不是分散绑 input 事件

把验证逻辑集中在表单的 submit 事件里,比给每个输入框单独监听 inputblur 更可靠——它确保用户真正想提交时才执行完整校验,也避免频繁触发影响性能。同时保留 blur 作为辅助反馈(比如失焦时标红),但不依赖它决定是否允许提交。

使用场景:登录、注册、订单确认等需多字段协同校验的流程(例如“密码”和“确认密码”是否一致、“手机号”格式与长度是否匹配)。

立即学习Java免费学习笔记(深入)”;

  • submit 回调开头立刻调用 event.preventDefault(),防止默认提交行为
  • form.checkValidity() 快速检查原生约束,返回 false 时可直接 return,省去重复判断
  • 自定义校验(如两次输入密码比对)放在原生校验之后,避免冗余提示
  • 校验失败后,聚焦第一个出错字段:firstInvalidField.focus(),提升可访问性

手动验证时,用 setCustomValidity() 控制错误消息,而非 alert 或 DOM 操作

setCustomValidity() 是原生 API 提供的标准方式,它让字段参与整体 checkValidity() 流程,并在调用 reportValidity() 时统一展示提示。相比手动插入 ,它更轻量、兼容性好(IE10+)、且与屏幕阅读器协作更好。

唱鸭
唱鸭

音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

下载

参数差异:setCustomValidity('') 表示“校验通过”,setCustomValidity('用户名已被占用') 表示失败并设提示文案;传空字符串以外的值才会被判定为无效。

  • 每次验证前先调用 input.setCustomValidity('') 清除旧状态,否则上次失败会持续影响后续校验
  • 不要在 input 事件里反复调用 setCustomValidity(),容易造成 UI 抖动;适合在 blursubmit 时设置
  • 若需国际化,可在调用 setCustomValidity() 前查翻译表,而不是硬编码中文

异步验证(如用户名可用性)必须禁用提交按钮并处理竞态问题

用户输完“用户名”后,发请求查是否已存在,这类操作天然有延迟和不确定性。常见错误是没锁住提交按钮,导致用户连点多次发送重复请求;或后发的请求先返回,覆盖了先发的正确结果(竞态)。

性能影响:频繁输入时若每键都发请求,会浪费带宽、拖慢响应。应加防抖(debounce),延迟 300ms 再发,且在新请求发出前取消上一个 fetch(用 AbortController)。

  • 提交按钮初始设为 disabled,所有异步验证完成且全部通过后再启用
  • AbortController 实现请求取消:const controller = new AbortController(); fetch(url, { signal: controller.signal })
  • 校验失败时,仍需调用 input.setCustomValidity('') 清空状态,再设新错误文案,否则 reportValidity() 不会重新触发提示
  • 网络异常时,应降级为“请稍后重试”,而不是静默失败

复杂点在于:原生验证和异步验证的生命周期要对齐。容易被忽略的是,用户修改字段后未再次触发异步校验,就直接点提交——这时得在 submit 里主动触发一次,且等待 Promise 完成后再继续后续逻辑。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

508

2023.10.23

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

434

2024.03.06

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

68

2025.12.30

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

84

2025.12.30

html5空格代码怎么写
html5空格代码怎么写

在HTML5中,空格不能直接通过键盘空格键实现,需使用特定代码。本合集详解常用空格写法:&nbsp;(不间断空格)、&ensp;(半个中文空格)、&emsp;(一个中文空格)及CSS的white-space属性等方法,帮助开发者精准控制页面排版,避免因空格失效导致布局错乱,适用于新手入门与实战参考。

76

2025.12.30

html5怎么做网站教程
html5怎么做网站教程

想从零开始学做网站?这份《HTML5怎么做网站教程》合集专为新手打造!涵盖HTML5基础语法、页面结构搭建、表单与多媒体嵌入、响应式布局及与CSS3/JavaScript协同开发等核心内容。无需编程基础,手把手教你用纯HTML5创建美观、兼容、移动端友好的现代网页。附实战案例+代码模板,快速上手,轻松迈出Web开发第一步!

156

2025.12.31

HTML5建模教程
HTML5建模教程

想快速掌握HTML5模板搭建?本合集汇集实用HTML5建模教程,从零基础入门到实战开发全覆盖!内容涵盖响应式布局、语义化标签、Canvas绘图、表单验证及移动端适配等核心技能,提供可直接复用的模板结构与代码示例。无需复杂配置,助你高效构建现代网页,轻松上手前端开发!

28

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

40

2025.12.31

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

9

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号