JavaScript:表单验证模型
之前做的验证提示以弹框的形式出现太丑陋了,不符合标准的验证提示。如果要想进行更好的数据验证操作,那么必须进行一些模块化设计,通过表单样式的改变来提示。其实,一般的数据验证无非就是那么几种,例如:

大多数的语言,在实际开发中都具有封装性的特点。那么为了保证验证的完整性,应该有一个专门的工具文件—utlity.js文件,实际上是也就是建立一个表单验证模型,模型化操作。一般的验证提示规划格式如下:

例如表单代码格式:
<form action="pass.html" method="post" id="loginForm">
<!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->
用 户 名:<input type="text" name="uid" id="uid" class="init"></input><span id="uidSpan"></span><br>
初始密码:<input type="text" name="password" id="password" class="init"></input><span id="passwordSpan"></span><br>
确认密码:<input type="text" name="conf" id="conf" class="init"></input><span id="confSpan"></span><br>
<button type="submit" id="subBtn">登录</button>
<button type="reset" id="restBtn">重置</button>
</form>
好了,这些表单的id设置好了后,我们只需要在utlity.js工具文件中进行数据的验证。那么如何调用这个工具来进行验证呢?即流程大致如下:

对于验证而言,往往是发生在一个组件失去焦点后,表单样式发生改变。失去焦点为”onblur”事件,而获得焦点为“onfocus”。
完整的范例代码如下:
表单通过提示文件:pass.html
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="description" content=event.html"">
<meta name="keywords" content="event,html,js">
<body>
<h1>表单验证通过!</h1>
</body>
</html>
表单文件:form.html
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="description" content=event.html"">
<meta name="keywords" content="event,html,js">
<title>javascript的程序开发之表单提交事件处理</title> <link rel="stylesheet" type="text/css" href="form.css"> //导入样式文件
<script type="text/javascript" src="utlity.js"></script> //导入工具文件
<script type="text/javascript" src="vform.js"></script> //导入表单操作文件 </head>
<body>
<form action="pass.html" method="post" id="loginForm">
<!--在以后的开发过程之中,必须要保证id与name属性内容完全一致,否则会出现怪异问题-->
用 户 名:<input type="text" name="uid" id="uid" class="init"></input><span id="uidSpan"></span><br>
初始密码:<input type="text" name="password" id="password" class="init"></input><span id="passwordSpan"></span><br>
确认密码:<input type="text" name="conf" id="conf" class="init"></input><span id="confSpan"></span><br>
<button type="submit" id="subBtn">登录</button>
<button type="reset" id="restBtn">重置</button>
</form>
</body>
</html>
表单提交初始、提交失败、提交成功时样式设置文件:form.css
/*成功*/
.success{
background:#f5f5f5;
font-weight:bold;
color:#000000;
border:solid 1px #009900; /*边框为绿色*/
} /*失败*/
.failure{
background:#f5f5f5;
font-weight:bold;
color:#000000;
border:solid 1px #990000; /*边框为红色*/
} /*初始化*/
.init{
background:#f5f5f5;
font-weight:bold;
color:#000000;
}
表单提交操作文件,动态绑定事件处理:vfrom.js
window.onload = function(){ //在页面加载之后动态事件绑定
document.getElementById("uid").addEventListener('blur',function(){
validateUid();
},false);
document.getElementById("password").addEventListener('blur',function(){
validatePassword();
},false);
document.getElementById("conf").addEventListener('blur',function(){
validateConf();
},false);
document.getElementById('loginForm').addEventListener('submit',function(e){ //e是提交事件
if( validateUid() && validatePassword() && validateConf()){ //可以提交
this.submit();
}else{
formStop(e); //传入事件
}
},false);
}
function validateUid(){ //专门验证uid数据
// return validateEmpty("uid"); //空的验证
return validateEmail("uid"); //邮箱的验证
// return validateNumber("uid"); //数字的验证
}
function validatePassword(){ //专门验证password数据
return validateEmpty("password"); //传入元素名称
}
function validateConf(){
return validateRepeat("password","conf");//传入原密码和确实密码的id
}
/**
它负责表单在出现问题时进行提交
*/
function formStop(e){
if (e && e.preventDefault) { //现在是在W3C标准下执行
e.preventDefault(); //阻止浏览器的动作
}else{ //专门针对于IE浏览器的处理
window.event.returnValue= false;
}
}
表单提交操作的工具文件:utility.js
/**
本文件是一个JS工具文件,里面提供有一系列的属性、函数、类。
*/ /**
本方法主要验证指定的元素的内容是否为空
*/
function validateEmpty(eleId){
var obj = document.getElementById(eleId);//取得一个表单元素
if(obj != undefined){
if(obj.value == ""){ //数据错误
setFailureStyle(obj);
return false; //表示验证失败
}else{
setSuccessStyle(obj);
return true; //验证成功
}
}
return false;
} /**
本方法主要验证指定的元素的内容进行正则验证
*/
function validateRegex(eleId,regex){ //从外部传入正则
if(validateEmpty(eleId)){ //进行是否为空的验证
var obj = document.getElementById(eleId);//取得一个表单元素
if(!regex.test(obj.value)){ //数据错误
setFailureStyle(obj);
return false; //表示验证失败
}else{
setSuccessStyle(obj);
return true; //验证成功
}
}
return false;
} /**
在正则的基础上验证邮箱
*/
function validateEmail(eleId){
return validateRegex(eleId,/^\w+@\w+\.\w+$/);
} /**
验证是否全部是数字
*/
function validateNumber(eleId){
return validateRegex(eleId,/^\d+(\.\d)?$/);
} /**
验证确认密码
*/
function validateRepeat(srcId,distId){ //初始密码的id,确认密码的id
if(validateEmpty(srcId) && validateEmpty(distId)){
var srcObj = document.getElementById(srcId);
var distObj = document.getElementById(distId);
if(srcObj.value != distObj.value){ //失败
setFailureStyle(distObj);
return false; //表示验证失败
}else{ //成功
setSuccessStyle(distObj);
return true; //验证成功
}
}
return false;
} /**
设置错误的样式
*/
function setFailureStyle(obj){ obj.className = "failure"; //设置错误的样式
var spanObj = document.getElementById(obj.id+"Span"); //取得提示信息元素
if(spanObj != null){
spanObj.innerHTML = "<font color='red'>×</font>";
}
} /**
设置正确的样式
*/
function setSuccessStyle(obj){ obj.className = "success"; //设置正确的样式
var spanObj = document.getElementById(obj.id+"Span"); //取得提示信息元素
if(spanObj != null){
spanObj.innerHTML = "<font color='green'>√</font>";
}
}
效果截图如下:
表单默认状态样式:

任意数据为空时样式 :

用户名为邮箱格式正确时样式:

初始密码和确认密码不一致时样式:

用户名为邮箱格式正确、初始密码和确认密码一致时样式:

最后提交表单成功:

JavaScript:表单验证模型的更多相关文章
- JavaScript表单验证年龄
JavaScript表单验证年龄,判断一个输入量是否符合年龄,通过正则表达式实现. //检查年龄 function isAge(str){ var mydate=new Date; var now=m ...
- 前端工具 - 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- JavaScript表单验证和正则表达式
JavaScript表单验证 分为四类: 1.非空验证 常用于用户名等 2.相等验证 常用于验证两次输入的密码 3.范围验证 常用于年龄等 4.正则验证 用于手机号,邮箱号等 以下是实例: <! ...
- 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- JavaScript 表单验证入门
JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 被 JavaScript 验证的这些典型的表单数据有: 用户是否已填写表单 ...
- JavaScript 表单验证 案例
JavaScript 表单验证 案例 版权声明:未经授权,严禁转载! 编写 HTML 文件,搭建主体界面 <html> <head> <meta charset=&q ...
- 10个强大的Javascript表单验证插件推荐
创建一个JavaScript表单验证插件,可以说是一个繁琐的过程,涉及到初期设计.开发与测试等等环节.实际上一个优秀的程序员不仅是技术高手,也应该是善假于外物的.本文介绍了10个不错的JavaScri ...
- JavaScript 表单验证正则表达式大全
JavaScript 表单验证正则表达式大全[转载] 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[ ...
- javascript表单验证
表单HTML <form action="" method="post"> <fieldset class="login" ...
随机推荐
- JS中的闭包的一些理解!
在日常的开发中,基本上是不会遇到关于闭包的这样,但是,因为在一些特殊的情况下,必须采用闭包,所以这里简单的概述下什么是闭包: OK!简而言之,闭包只是一个名词而已,我们更注重于他所实现的功能,也就是我 ...
- Swift UICollectionView 简单使用
最近要研究下排布的游戏关卡界面的实现,简单做了个UICollectionView的demo. 先看最后的效果: 下面来看实现的方法把,在Storyboard对应的ViewController中增加一个 ...
- 更新AD对象属性值
1. 对于Set-ADUser不包含的对象属性,可以采用replace来操作 Set-ADUser -Identity 'UserA' -Replace @{userWorkstations = 'C ...
- org.apache.struts2.json.JSONWriter can not access a member of class
偶遇一个问题:org.apache.struts2.json.JSONWriter can not access a member of class org.apache.tomcat.dbcp.db ...
- FZU 2092 bfs+记忆化搜索
晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...
- java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet的解决方案
tomcat7启动后出现:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet这个问题. 并且访问 ...
- 一些Discuz!代码
首行缩进2字符 [code][p=20, 2, left]首行缩进2字符[/p][/code]
- selenium测试套件
1.测试套件测试套件,简单理解就是讲多个用例,装在一个容器里来同时执行完成. 2.测试套件分析 #coding=utf-8 import unittestimport BaiDuSearch,BaiD ...
- 2014总结&2015计划
2014总结&2015计划 今天是2015/1/1,新的一年终于到来了,昨天老板要求提交2014的工作总结和2015的工作计划,正好提醒我,要总结和计划了. 先回顾2014年初的计划: 新年计 ...
- by maintaining a log containing a record of each transaction’s activities - The Commit/Rollback Protocol
Computer Science An Overview _J. Glenn Brookshear _11th Edition Before a transaction is allowed to a ...