工作了一个星期各位一定累了吧,那我们一起来表单验证一番吧!

简介:
前言

对于前端来说,没有做过表单验证是不可能的,但是,我们一般都是用的别人写好的插件,反正都周末了,我们今天晚上就试着看看自己能不能写一个出来试试呢?

PS:该产物纯粹实验产品,丑陋之处请多见谅!

验证的类型

常见的表单验证一般有以下几个:

① 非空验证

② 身份证验证

③ 数字验证(数字范围验证)

④ 邮件验证

⑤ 手机验证

⑥ QQ验证

⑦ 中文/英文用户名验证(可能含有AJAX类型验证)

⑧ 密码验证/重复密码验证

⑨ 单选框/下拉菜单/多选框验证

......

我那个去,简简单单一写怎么会有这么多东西呢!!!!看来今天晚上有点吃紧了,没事我们一步步来试试,确实不行也不会罚款,确实错了也没人责备,我们错得起。

表单提示框

友好的提示框是第一位的,来来,比如我们这里有个文本框,我们需要实现如下提示框:



我们一个怎么做呢?而且提示框种类比较多,我们便不强求了,但是以下两种也是很有可能出现的,我们是不是应该考虑呢?





若是我们的网页要求出现以上三种任意一种表现形式一完全合理的,所以我们还得都实现了!

但是实现前我们先干点其他事情,看看这段有意思的代码吧:

三角形图标

<div style=" width: 10px; height: 10px; 
border-width: 10px; border-style: solid; border-color: black Yellow Gray Green"></div>
这段代码很有意思,我们来看看他将形成的图形,以及去掉宽度与高度会形成的样子:

<div style="width: 10px; height: 10px; border-width: 10px; border-style: solid; border-color: black Yellow Gray Green;
    position: absolute;">
</div>
<div style="border-width: 10px; border-style: solid; border-color: black Yellow Gray Green;
    position: absolute; top: 50px;">


这个图形很怪,我们看着他的几个边框居然形成了三角形!!!!那我们是不是可以省略图标了呢?

<div style="border-width: 10px; border-style: solid; border-color: transparent; 
border-top-color: Black;  position: absolute; top: 50px;">


<div style="border-width: 10px; border-style: solid; border-color: transparent; 
    border-right-color: Black;  position: absolute; top: 50px;">


<div style="border-width: 10px; border-style: solid; border-color: transparent; 
    border-bottom-color: Black;  position: absolute; top: 50px;">


<div style="border-width: 10px; border-style: solid; border-color: transparent; 
    border-left-color: Black;  position: absolute; top: 50px;">


以上这个东西各位应该都比较清楚的,而且看着提示图对他的使用也一定不言而喻,我这里还是赘述一下吧:

复制代码
<div class="posTop" >
<div class="triangle_icon">
<div class="before"></div>
<div class="after"></div>
</div>请输入数字
</div>
复制代码
这就是图标的结构,以下是CSS样式:

复制代码
.triangle_icon { position: absolute; }
.triangle_icon div { border-style: solid; border-width: 6px; position: absolute; }
        
/*上边提示*/
.posTop .triangle_icon { width: 12px; height: 12px; bottom: -12px; }
.posTop .triangle_icon .after { bottom: 1px; }
.posTop .triangle_icon .after { border-bottom-color: transparent; border-right-color: transparent; border-left-color: transparent; }
.posTop .triangle_icon .before { border-bottom-color: transparent; border-right-color: transparent; border-left-color: transparent; }
复制代码
为了根据外部ClassName而设置不同的展示方式,而且不同的状态拥有不同的样式,最后形成了这个CSS:

复制代码
.validateTips { min-width: 100px; border-radius: 2px; padding: 5px 10px; z-index: 500; position: absolute; font-size: 12px; }
.validateInit { background: #FFFFE0; border: 1px solid #F7CE39; }
.validateError { background: orange; border: 1px solid red; }
.validateSuc { background: #79D62D; border: 1px solid Green; }
.triangle_icon { position: absolute; }
.triangle_icon div { border-style: solid; border-width: 6px; position: absolute; }
        
/*上边提示*/
.posTop .triangle_icon { width: 12px; height: 12px; bottom: -12px; }
.posTop .triangle_icon .after { bottom: 1px; }
.posTop .triangle_icon .after { border-bottom-color: transparent; border-right-color: transparent; border-left-color: transparent; }
.posTop .triangle_icon .before { border-bottom-color: transparent; border-right-color: transparent; border-left-color: transparent; }
        
/*右边提示*/
.posRight .triangle_icon { width: 12px; height: 12px; left: -12px; }
.posRight .triangle_icon .after { left: 1px; }
.posRight .triangle_icon .after { border-top-color: transparent; border-bottom-color: transparent; border-left-color: transparent; }
.posRight .triangle_icon .before { border-top-color: transparent; border-bottom-color: transparent; border-left-color: transparent; }
        
/*下边提示*/
.posBottom .triangle_icon { width: 12px; height: 12px; top: -12px; }
.posBottom .triangle_icon .after { top: 1px; }
.posBottom .triangle_icon .after { border-top-color: transparent; border-right-color: transparent; border-left-color: transparent; }
.posBottom .triangle_icon .before { border-top-color: transparent; border-right-color: transparent; border-left-color: transparent; }
        
        
/*初始化时候的皮肤*/
.validateInit .before { border-color: #F7CE39; }
.validateInit .after { border-color: #FFFFE0; }
        
/*失败时候的皮肤*/
.validateError .before { border-color: red; }
.validateError .after { border-color: orange; }
        
/*成功时候的皮肤*/
.validateSuc .before { border-color: Green; }
.validateSuc .after { border-color: #79D62D; }
复制代码
定位提示框

提示框样式有了,我们需要将它定位到特定的输入框之上,所以我规定了以下格式(实验产物,勿笑):

复制代码
<div class="form">
    <div>
        身份证:<input type="text" id="idCard" class="formValidate" data-cfg="{ initMsg: '请输入身份证号码!' }" />
    </div>
    <div>
        数字:<input type="text" id="num" class="formValidate" data-cfg="{ initMsg: '请输入数字', msgPosition: 'top'}" />
    </div>
    <div>
        邮件:<input type="text" class="formValidate" data-cfg="{ initMsg: '请输入邮箱地址!'}" />
    </div>
    <div>
        手机:<input type="text" class="formValidate" data-cfg="{ msgPosition: 'bottom', initMsg: '请请输入手机号码!'}" />
    </div>
    <div>
        QQ:<input type="text" class="formValidate" data-cfg="{ initMsg: '请请输入手机号码!'}" />
    </div>
    <input type="button" value="提交" id="bt" />
</div>
复制代码
我们这里对需要验证的文本框做了一个约束:

① 要求指定ID(不知道需要不,但是考虑到漂浮提示以后的控制还是加上吧)

② 必须指定class拥有formValidate

③ 必须指定自定义属性(json),将配置信息加上

于是我们加上js代码:

 位置的代码


于是我们密密麻麻的形成了这个页面,主要思路见代码,我这里简单说下:

1 根据class变量表单,获取每个元素

2 定位到每个元素,根据其配置信息,将提示框插入文本,并定位之。

至此,我们提示框像个就结束了,后面点的内容,我支支吾吾搞了好久都不太能推走了,我们接下来看看吧。

如何验证表单?

有了提示信息,另外一个问题马上就出现了

1 我应该如何验证表单呢?正则表达式?如果我写的不满足后续需求呢?

2 如何实现密码对比功能

3 如何实现选择框等功能

4 如何实现非空验证功能

5 如何取消验证

6 取消验证后如何加上某项验证

......

一系列问题抛了出来,我就边写边思考,最后搞出来都面目全非了,形成了这样的代码:

js文件:

 View Code
html代码:

 View Code




结语

晃晃悠悠几个小时就过去了,今天的任务没能完成!!!!

写到后面就没有详细写下去了,因为我有几个问题没能解决,加之明天还要上班。。。。所以今天便不再坚持了。

明天晚上希望能解决自己的疑问,并整理下代码,再详加说明吧。



本文转自叶小钗博客园博客,原文链接:http://www.cnblogs.com/yexiaochai/archive/2013/06/01/3111699.html,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
50 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
5月前
|
JavaScript
哇哦~ 老板让我用 vue3 setup 实现动态表单的功能?这有什么难度吗?立马安排!
哇哦~ 老板让我用 vue3 setup 实现动态表单的功能?这有什么难度吗?立马安排!
|
7月前
|
JavaScript
一篇文章讲明白js获取当前时间(昨天、今天、明天)
一篇文章讲明白js获取当前时间(昨天、今天、明天)
456 0
|
8月前
|
JavaScript 小程序 前端开发
JS将时间戳转换为刚刚、N分钟前、今天几点几分、昨天几点几分等表示法
JS将时间戳转换为刚刚、N分钟前、今天几点几分、昨天几点几分等表示法
126 0
|
前端开发 JavaScript
用Transition组件犯迷糊?看我这篇给你安排的明明白白的
transition组件作为Vue的内置组件,可以用来实现组件的过渡效果。在Vue中,过渡效果是通过CSS来实现的,所以过渡不是如何使用组件,而是如何写CSS。
152 0
用Transition组件犯迷糊?看我这篇给你安排的明明白白的
|
Web App开发 数据采集 存储
我给项目加了性能守卫插件,同事叫我晚上别睡的太死-1
由于我组主要是负责的是H5移动端项目,老板比较关注性能方面的指标,比如首页打开速度,所以一般会关注FP,FCP等等指标,所以一般项目写完以后都会用lighthouse查看,或者接入性能监控系统采集指标.
133 0
|
安全 Java Linux
正确认识及掌握时间的用法
时间是一个相对地区而言的概念,因此有一个基准地区,就是本初子午线穿过的地区。了解世界时间相关的概念可以更好地协调全球人们的活动,便于跨越不同地区的时差。比如按照UTC时区划分算,洛杉矶和北京 之间的时间差异是16个小时, 但是一旦洛杉矶启用了夏令时两者之间的时间差异只有15个小时,神奇吗?
378 0
正确认识及掌握时间的用法
|
消息中间件 Dubbo NoSQL
老板,JDK8的日期、时间函数我不熟悉?
介绍JDK 8中的新日期工具类,及整理成PDF文档
88 0
|
存储 JavaScript 前端开发
前端阿瓜每周速记(2020 第 34 周)
毕竟不是全职写文,工作生活之余,遇到自己想写的,又不想随便水一水、或只做一个搬运工,往往需要查阅大量相关知识来吸收、总结、抽离、创新,时间上太紧,难成好作。