博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript:综合案例-表单验证
阅读量:5116 次
发布时间:2019-06-13

本文共 6189 字,大约阅读时间需要 20 分钟。

综合案例:表单验证

开发要求:

  要求定义一个雇员信息的增加页面,例如页面名称为"emp_add.htmnl",而后在此页面中要提供有输入表单,此表单定义要求如下:
    .雇员编号:必须是4位数字,按照正则进行验证;
    .雇员姓名:不能为空;
    .雇员职位:不能为空;
    .雇员日期:按照"yyyy-mm-dd"的格式编写,按照正则进行验证;
    .基本工资:按照小数编写,小数为最多2位,按照正则进行验证;
    .佣金:难找小数编写,小数位数最多2位,按照正则进行验证。

具体步骤:

  第一:定义表单
    .将form.css文件拷贝到css目录之中;
    .将emp_add.html页面之中编写表单,以及导入form.css文件的引用;

第二:页面动态效果

  1、为表格增加一些显示的过渡效果
    .可以建立一个工具类文件util.js,难么在文件中提供有表格改变的处理函数;
    .既然现在是在emp_add.html文件进行处理,所以应该准备js/emp_add.js文件;
    .在emp_add.html文件中导入uitl.js与emp_add.js文件;
    .动态设置显示的效果,增加mouseover和mouseout事件,在表格行元素中增加。

  2、考虑到代码的可重用性问题,所以建议将具体的验证交给util.js来完成。

    .建立validateEmpty()、validateRegex()、validateNumber()、validateDate();
    .建立完一个函数之后一定要对这个函数的可用性进行测试;
    .在emp_add.js文件里面动态绑定事件,使用的还是“onblur”事件;

  3、分别绑定完事件处理之后,下面针对于表单进行事件的处理。

第三:使用日期选择组件
  对于日期的控制需要注意一个问题:正则只能够针对于日期的格式进行判断,但是无法对内容进行验证,而且日期这一操作,不应该让用户随意输入,最好的一个做法是由用户自己选择,也即使用日期组件直接选取日期,这个可以直接去网上下载将代码拷贝过来即可使用。

例如 My97DatePicker日期组件: 

 

具体代码如下:

emp_add.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;}

emp_add.js

window.onload = function(){    //1、为表格的行增加动态效果    var trObj = eleAll("empTr");    for (var i = 0; i < trObj.length; i++) {        bindEvent("mouseover",trObj[i],function(){            changeColor(this,'FFFFFF');        });        bindEvent("mouseout",trObj[i],function(){            changeColor(this,'F2F2F2');        });    }    //2、设置验证事件    bindEvent("blur",ele("empNo"),function(){        validateEmpNo();    });    bindEvent("blur",ele("empName"),function(){        validateEmpName();    });    bindEvent("blur",ele("empJob"),function(){        validateEmpJob();    });    bindEvent("blur",ele("empDate"),function(){        validateEmpDate();    });    bindEvent("blur",ele("empSal"),function(){        validateEmpSal();    });    bindEvent("blur",ele("empCom"),function(){        validateEmpCom();    });    //3、处理表单的绑定    bindEvent("submit",ele("empForm"),function(e){        if (validateForm()) {            this.submit(); //提交表单        }else{            if(e && e.preventDefault){ //现在是在W3C标准下执行                e.preventDefault(); //阻止浏览器的执行            }else{ //专门针对于IE浏览器的处理                window.event.returValue = false;            }        }    });}//验证雇员编号function validateEmpNo(){    return validateRegex("empNo",/^\d{4}$/);}//验证雇员姓名function validateEmpName(){    return validateEmpty("empName");}//验证雇员职位function validateEmpJob(){    return validateEmpty("empJob");}//验证雇佣日期function validateEmpDate(){    return validateDate("empDate");}//验证基本工资function validateEmpSal(){    return validateSal("empSal");}//验证佣金function validateEmpCom(){    return validateCom("empCom");}//表单事件function validateForm(){    return validateEmpNo() && validateEmpName() && validateEmpJob() && validateEmpDate() && validateEmpSal() && validateEmpCom();}

util.js

//改变颜色function changeColor(obj,color) {    if (obj != undefined) {        obj.bgColor = color;    };}//获取HTML元素function ele(eleID) {    return document.getElementById(eleID);}function eleAll(eleID) {    return document.all(eleID);}//为HTML元素动态绑定事件function bindEvent(eventType,obj,fun) {    obj.addEventListener(eventType,fun,false);}//建立validateNumber()方法进行数字验证function validateNumber(eleID) {    return validateRegex(eleID,/^\d+(\.\d+)?$/);}//建立validateDate()方法进、进行日期验证function validateDate(eleID) {    return validateRegex(eleID,/^\d{4}-\d{2}-\d{2}$/);}//建立validateSal()方法基本工资验证function validateSal(eleID) {    return validateRegex(eleID,/^\d{1,5}(\.\d{1,2})?$/);}//建立validateCom()方法基本佣金验证function validateCom(eleID) {    return validateRegex(eleID,/^\d{1,5}(\.\d{1,2})?$/);}//建立validateEmpty()方法验证数据是否为空function validateEmpty(eleID) {    var obj = ele(eleID);//取得指定名称的对象    if (obj != null) {        if (obj.value == "") {  //数据验证出错            setFailureStyle(obj);            return false;        }else{   //数据验证成功            setSuccessStyle(obj);            return true;        }    }    return false;}//建立validateRegex()方法进行正则的验证function validateRegex(eleID,regex) {    var obj = ele(eleID);//取得指定名称的对象    if (validateEmpty(eleID)) {  //有数据        if (!regex.test(obj.value)) { //没有通过            setFailureStyle(obj);            return false;        }else{ //数据验证成功            setSuccessStyle(obj);            return true;        }    }}//设置成功时的样式与信息提示function setSuccessStyle(obj) {    if (obj != null) {        obj.className = "success";        var spanObj = ele(obj.id + "Span");        if (spanObj != null) { //给出了提示元素位置            spanObj.innerHTML = "";        }    }    }//设置失败时的样式与信息提示function setFailureStyle(obj) {    if (obj != null) {        obj.className = "failure";        var spanObj = ele(obj.id + "Span");        if (spanObj != null) { //给出了提示元素位置            spanObj.innerHTML = "×";        }    }    }

效果图如下:

默认时:

信息全为空时,验证不通过:

信息任意一个为空时,验证不通过:

信息都不为空且符合格式时,验证全通过:

选取日期时:

 

完整代码下载:

 CnBolog:

 Github: 

 

转载于:https://www.cnblogs.com/XYQ-208910/p/5840007.html

你可能感兴趣的文章
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Html5 离线页面缓存
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>