他们说大多数网络应用只是HTML表单。好吧,表单需要验证,谢天谢地,HTML5带有许多优秀的内置表单验证功能,可用于电子邮件,数字,最大值,分钟等。您甚至可以使用模式编写自己的验证规则。在本文中,我将讨论如何在覆盖无聊的默认值时利用HTML5验证,以便您可以根据需要显示验证错误。我将与Vuejs合作,但即使你不使用Vue,你也可以随时跟进。

让我们从Bootstrap示例的Checkout表单的开始,这样我们就不必过于担心样式了。您可以在此处克隆器。设置应如下所示:

使用Vuejs Starter进行HTML验证

默认的HTML5验证不会立即显示所有表单错误。具有讽刺意味的是,一旦用户提交,浏览器实际上就知道所有无效字段,所以现在我们所要做的就是检查它们然后显示我们喜欢的内容。

现在让我们为表单和一个使用Vuejs捕获提交事件的监听器添加一个id。

First name

Valid first name is required.

Last name

Valid last name is required.

SUBMIT

添加事件监听器以提交表单

然后在我们的form-validation.js文件中,我们将初始化Vuejs并创建处理表单提交和验证的方法。

const vueApp = new Vue({ el: '#validated-form', methods: { submitForm () { if (this.validateForm()) { console.log('formValidated'); //submit form to backend } }, validateForm () { var formId = 'validated-form'; var nodes = document.querySelectorAll(`#${formId} :invalid`); console.log(nodes); return true; } }});

这里我们创建了两个方法submitFormvalidateForm。submitForm调用validateForm,如果满足所有验证规则,则返回true。现在,我们从控制日志记录中查看所有无效的表单输入,我们可以找到许多有趣的属性,包括我们可以向用户显示的validationMessage

输入属性无效

接下来,让我们创建将保存每个无效输入的validationErrors的数据属性。然后我们将循环遍历无效输入数组以设置每个输入。

const vueApp = new Vue({ el: '#validated-form', data: function () { return { validationErrors: { firstName: null, lastName: null, username: null, email: null, address: null, country: null, state: null, zip: null, } } }, methods: { submitForm () { if (this.validateForm()) { alert('Form Submitted') //submit form to backend } }, validateForm () { var formId = 'validated-form'; var nodes = document.querySelectorAll(`#${formId} :invalid`); var errorObjectName = 'validationErrors'; var vm = this; //current vue instance; Object.keys(this[errorObjectName]).forEach(key => { this[errorObjectName][key] = null }); if (nodes.length > 0) { nodes.forEach(node => { this[errorObjectName][node.name] = node.validationMessage; node.addEventListener('change', function (e) { vm.validateForm(); }); }); return false; } else { return true; } } }});

在这里,我们做了很多事情。我们创建了validationErrors数据属性来保存每个字段的错误消息。validationErrors对象的每个属性对应于要验证的每个表单元素的name属性。因此在validateForm方法中,我们清除任何先前的错误消息,然后遍历无效字段以设置其相应的validationErrors。我们还添加了一个事件侦听器,一旦无效字段发生更改,就会重新验证。

现在我们需要为要验证的每个字段添加名称属性,这在制作表单时非常正常。然后,我们还应该添加将向用户显示错误消息的span元素。

First name
Last name

Username

@

Email (Optional)

SUBMIT

现在,一旦我们提交表单,我们的用户就可以看到他们需要修复的所有验证错误。很酷的是我们已经完成了它而无需引入额外的库来进行验证。现在,因为我们正在利用Vue的数据绑定能力,我们可以从这里获得有关我们希望如何显示错误的创意。


使用HTML5模式

如果我们需要超出可用的验证规则,该怎么办?例如,检查邮政编码是否有效。这就是HTML5模式非常有用的地方,因为我们可以在HTML中编写正则表达式来执行我们需要的任何类型的检查。我觉得有人正在宣誓正常表达,但幸运的是你可以在html5pattern.com找到一大堆有用的正则表达式。

好吧,找到一个正则表达式比我想象的要困难一些。事实证明,他们大多是7位数字。所以[0-9] {13,16}应该可以正常工作。现在我们遇到了一个新问题。关于HTML5模式的错误消息不是很有用,所以我们需要指定自己的。我们需要一种方法来告诉validateForm函数显示什么消息。

Zip

SUBMIT

添加标题和模式属性

然后我们可以在validateForm方法中检查title属性:

validateForm (formId = 'validated-form', errorObjectName = 'validationErrors') { var nodes = document.querySelectorAll(`#${formId} :invalid`); var vm = this; //current vue instance; Object.keys(this[errorObjectName]).forEach(key => { this[errorObjectName][key] = null }); if (nodes.length > 0) { nodes.forEach(node => { if (node.title) { this[errorObjectName][node.name] = node.title; } else { this[errorObjectName][node.name] = node.validationMessage; } node.addEventListener('change', function (e) { vm.validateForm(formId, errorObjectName); }); }); return false; } else { return true; }}

这里我们添加了一个if-else块来检查title属性,如果找不到则只显示默认错误消息。此外,formIderrorObjectName变量现在被传递到validateForm函数,这允许我们在同一个网页上验证我们选择的方式和方式。


我们已经能够为表单验证创建一个简单的约定配置方法。一旦我们在validationErrors对象中指定了表单字段的名称属性,我们的cool validateForm函数就会利用内置的HTML5功能来完成剩下的工作,我们需要做的就是按照我们想要的方式显示错误。一如既往,我希望这有助于某人。

如果您正在使用Vue,则可以使用此代码段快速启动验证,并且它也不应该很难应用于其他前端框架。您还可以 此repo演示网站上找到本文的工作代码。

干杯!

转:https://itnext.io/form-validation-with-html-vuejs-54ec18e473aa

float js 正则 验证_使用HTML和Vuejs进行表单验证相关推荐

  1. angular js创建表单_如何优雅的使用 Angular 表单验证

    随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...

  2. html表单判断字符数,JS判断字符串长度,结合element el-input el-form 表单验证(英文占1个字符,中文汉字占2个字符)...

    首先看看判断字符串长度的几种方法(英文占1个字符,中文汉字占2个字符) 方法一: function strlen(str) { var len = 0; for (var i = 0; i < ...

  3. html input validator,BootstrapValidator 表单验证超详要怎么做?表单验证超详细教程 !...

    我们在接触Bootstrap的时候总会遇到不同的问题和困难,今天我们就来说说有关于"BootstrapValidator 表单验证超详要怎么做?"这个问题.下面是小编整理的有关于这 ...

  4. 表单提交前ajax验证,在Ajax提交之前进行jQuery表单验证

    9 个答案: 答案 0 :(得分:85) 您可以使用submitHandler选项.基本上将$.ajax调用放在此处理程序中,即使用验证设置逻辑将其反转. $('#form').validate({ ...

  5. html表单验证用正则表达式,JavaScript 使用正则表达式进行表单验证的示例代码

    搜索热词 JavaScript 表单验证正则表达式大全利用正则表达式判断是否是0-9的阿拉伯数字 function regIsDigit(fData) { var reg = new RegExp(& ...

  6. 分享21个JS抽奖转盘特效,36个JS表单验证,31个JS进度条,总有一款适合您

    分享21个JS抽奖转盘特效,36个JS表单验证,31个JS进度条,总有一款适合您 下载链接:https://pan.baidu.com/s/1TWOGqes5J2baelO9qdItXg?pwd=ma ...

  7. Angular JS 中的内置方法之表单验证

    angular js 结合html5 可以实现强大的表单验证功能 关闭html5自带的表单验证功能可以用 转载于:https://www.cnblogs.com/Pikzas/p/9005861.ht ...

  8. 企业网站前端制作实战教程 JQuery CSS JS HTML 登录表单验证

    引入重置css样式reset样式 @charset "utf-8"; html, body, div, span, applet, object, iframe, h1, h2, ...

  9. abap视图字段限制_在 Laravel 控制器中进行表单请求字段验证

    在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式.很多 Web 框架都对此功能专门提供了工具集,Lara ...

最新文章

  1. ad中电容用什么封装_干货 | 为什么单相电机要用电容,三相电机不需要电容?...
  2. 搜狗拼音输入法5.0_如何用搜狗拼音输入法输入生僻字?
  3. 超级大傻瓜代理器_年检尾气通不过咋办?傻瓜才更换三元催化器,聪明人一招解决!...
  4. pcb 布线电容 影响延时_信号在PCB走线中传输时延
  5. Safair css hack
  6. CPU主频频率越高,手机运行速度就越快吗?
  7. jdk11 后用的指定编码格式,读取文件
  8. 机器学习笔记(十一)----降维
  9. ALERT日志中常见监听错误:ORA-3136错误的排查
  10. elasticsearch报错exceptions.RequestError(400, u'mapper_parsing_exception', u'No handler field..
  11. java aes文件加密_JAVA AES文件加解密
  12. 原创 | 职场二十年(一)电话风波
  13. 微博html怎么编辑器,制作一个微博文本编辑器
  14. 【源码阅读 | 03】only-allow 统一规范团队包管理器
  15. 【应用统计学】随机变量的概率分布,数学期望和方差及协方差
  16. Linux系统打不开gedit文本编辑器
  17. 助教日志_【沈阳航空航天大学软件工程 1,2班】期末排行
  18. MySQL时间序列分表分区_干货丨时序数据库分区教程
  19. STM32CUBEMX驱动lcd1602,使用的是stm32f103c8t6芯片
  20. 蓝桥杯web:7.【数据交互】天气预报查询

热门文章

  1. nginx配置http、https访问,nginx指定ssl证书,阿里云腾讯云华为云设置nginx https安全访问
  2. linux/docker个人服务器项目中文变问号??,时间差8小时问题解决方法,最新,最有效
  3. 2022-2028年中国饮水机市场投资分析及前景预测报告
  4. cannot find package “github.com/json-iterator/go“cannot find package “github.com/modern-go/reflect2“
  5. 二叉树中和为某一值的路径
  6. 矩阵拼接 cat padding_pytorch
  7. python编程问题---第一次
  8. LeetCode简单题之子数组最大平均数 I
  9. 科技公司合作伙伴清单
  10. 嵌入式Linux设备驱动程序:发现硬件配置