FormValid0.5版本发布,带ajax自定义验证例子


Posted in Javascript onAugust 17, 2007
最新更新修改了当input元件name有包含[],把焦点移到元件上时会出现JS错误,只有IE是这种情况,没找到很好的解决办法,我只是把这种情况给排除了,就是当元件name有包含[]不把焦点移上去,哪果有好的解决办法请联系我。
并作了 demo8 - 结合jquery实现ajax自定义验证
下载:formvalid.zip
/* 
 * Copyright (c) 2006-2008 coderhome.net 
 * All rights reserved. 
 * Support : 志凡(dzjzmj@163.com) 
 * 
 * Version :  0.5 
 */ var FormValid = function(frm) { 
    this.frm = frm; 
    this.errMsg = new Array(); 
    this.errName = new Array(); 
    this.required = function(inputObj) { 
        if (typeof(inputObj) == "undefined" || inputObj.value.trim() == "") { 
            return false; 
        } 
        return true; 
    } 
    this.eqaul = function(inputObj, formElements) { 
        var fstObj = inputObj; 
        var sndObj = formElements[inputObj.getAttribute('eqaulName')]; 
        if (fstObj != null && sndObj != null) { 
            if (fstObj.value != sndObj.value) { 
               return false; 
            } 
        } 
        return true; 
    } 
    this.gt = function(inputObj, formElements) { 
        var fstObj = inputObj; 
        var sndObj = formElements[inputObj.getAttribute('eqaulName')]; 
        if (fstObj != null && sndObj != null && fstObj.value.trim()!='' && sndObj.value.trim()!='') { 
            if (fstObj.value <= sndObj.value) { 
                 return false; 
            } 
        } 
        return true; 
    } 
    this.compare = function(inputObj, formElements) { 
        var fstObj = inputObj; 
        var sndObj = formElements[inputObj.getAttribute('objectName')]; 
        if (fstObj != null && sndObj != null && fstObj.value.trim()!='' && sndObj.value.trim()!='') { 
            if (!eval('fstObj.value' + inputObj.getAttribute('operate') + 'sndObj.value')) { 
                 return false; 
            } 
        } 
        return true; 
    } 
    this.limit = function (inputObj) { 
        var len = inputObj.value.length; 
        if (len) { 
            var minv = inputObj.getAttribute('min'); 
            var maxv = inputObj.getAttribute('max'); 
            minv = minv || 0; 
            maxv = maxv || Number.MAX_VALUE; 
            return minv <= len && len <= maxv; 
        } 
        return true; 
    } 
    this.range = function (inputObj) { 
        var val = parseInt(inputObj.value); 
        if (inputObj.value) { 
            var minv = inputObj.getAttribute('min'); 
            var maxv = inputObj.getAttribute('max'); 
            minv = minv || 0; 
            maxv = maxv || Number.MAX_VALUE; 
            return minv <= val && val <= maxv; 
        } 
        return true; 
    } 
    this.requireChecked = function (inputObj) { 
        var minv = inputObj.getAttribute('min'); 
        var maxv = inputObj.getAttribute('max'); 
        minv = minv || 1; 
        maxv = maxv || Number.MAX_VALUE; 
        var checked = 0; 
        var groups = document.getElementsByName(inputObj.name); 
        for(var i=0;i<groups.length;i++) { 
            if(groups[i].checked) checked++; 
        } 
        return minv <= checked && checked <= maxv; 
    } 
    this.filter = function (inputObj) { 
        var value = inputObj.value; 
        var allow = inputObj.getAttribute('allow'); 
        if (value.trim()) { 
            return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, allow.split(/\s*,\s*/).join("|")), "gi").test(value); 
        } 
        return true; 
    } 
    this.isNo = function (inputObj) { 
        var value = inputObj.value; 
        var noValue = inputObj.getAttribute('noValue'); 
        return value!=noValue; 
    } 
    this.checkReg = function(inputObj, reg, msg) { 
        inputObj.value = inputObj.value.trim(); 
        if (inputObj.value == '') { 
            return; 
        } else { 
            if (!reg.test(inputObj.value)) { 
                this.addErrorMsg(inputObj.name,msg); 
            } 
        } 
    } 
    this.passed = function() { 
        if (this.errMsg.length > 0) { 
            FormValid.showError(this.errMsg,this.errName,this.frm.name); 
            if (this.errName[0].indexOf('[')==-1) { 
                frt = document.getElementsByName(this.errName[0])[0]; 
                if (frt.type!='radio' && frt.type!='checkbox') { 
                    frt.focus(); 
                } 
            } 
            return false; 
        } else { 
          return FormValid.succeed(); 
        } 
    } 
    this.addErrorMsg = function(name,str) { 
        this.errMsg.push(str); 
        this.errName.push(name); 
    } 
    this.addAllName = function(name) { 
        FormValid.allName.push(name); 
    } 
} 
FormValid.allName = new Array(); 
FormValid.showError = function(errMsg) { 
    var msg = ""; 
    for (i = 0; i < errMsg.length; i++) { 
        msg += "- " + errMsg[i] + "\n"; 
    } 
    alert(msg); 
} 
FormValid.succeed = function () { 
    return true; 
} 
function validator(frm) { 
    var formElements = frm.elements; 
    var fv = new FormValid(frm); 
    for (var i=0; i<formElements.length;i++) { 
        var validType = formElements[i].getAttribute('valid'); 
        var errorMsg = formElements[i].getAttribute('errmsg'); 
        if (!errorMsg) { 
            errorMsg = ''; 
        } 
        if (validType==null) continue; 
        fv.addAllName(formElements[i].name); 
        var vts = validType.split('|'); 
        var ems = errorMsg.split('|'); 
        for (var j=0; j<vts.length; j++) { 
            var curValidType = vts[j]; 
            var curErrorMsg = ems[j]; 
            switch (curValidType) { 
            case 'isNumber': 
            case 'isEmail': 
            case 'isPhone': 
            case 'isMobile': 
            case 'isIdCard': 
            case 'isMoney': 
            case 'isZip': 
            case 'isQQ': 
            case 'isInt': 
            case 'isEnglish': 
            case 'isChinese': 
            case 'isUrl': 
            case 'isDate': 
            case 'isTime': 
                fv.checkReg(formElements[i],RegExps[curValidType],curErrorMsg); 
                break; 
            case 'regexp': 
                fv.checkReg(formElements[i],new RegExp(formElements[i].getAttribute('regexp'),"g"),curErrorMsg); 
                break; 
            case 'custom': 
                if (!eval(formElements[i].getAttribute('custom')+'(formElements[i],formElements)')) { 
                    fv.addErrorMsg(formElements[i].name,curErrorMsg); 
                } 
                break; 
            default : 
                if (!eval('fv.'+curValidType+'(formElements[i],formElements)')) { 
                    fv.addErrorMsg(formElements[i].name,curErrorMsg); 
                } 
                break; 
            } 
        } 
    } 
    return fv.passed(); 
} 
String.prototype.trim = function() { 
    return this.replace(/^\s*|\s*$/g, ""); 
} 
var RegExps = function(){}; 
RegExps.isNumber = /^[-\+]?\d+(\.\d+)?$/; 
RegExps.isEmail = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/; 
RegExps.isPhone = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/; 
RegExps.isMobile = /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/; 
RegExps.isIdCard = /(^\d{15}$)|(^\d{17}[0-9Xx]$)/; 
RegExps.isMoney = /^\d+(\.\d+)?$/; 
RegExps.isZip = /^[1-9]\d{5}$/; 
RegExps.isQQ = /^[1-9]\d{4,10}$/; 
RegExps.isInt = /^[-\+]?\d+$/; 
RegExps.isEnglish = /^[A-Za-z]+$/; 
RegExps.isChinese =  /^[\u0391-\uFFE5]+$/; 
RegExps.isUrl = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/; 
RegExps.isDate = /^\d{4}-\d{1,2}-\d{1,2}$/; 
RegExps.isTime = /^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}$/;

本地下载
Javascript 相关文章推荐
jquery UI 1.72 之datepicker
Dec 29 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
js验证整数加保留小数点的简单实例
Dec 02 Javascript
js中javascript:void(0) 真正含义
Nov 05 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 Javascript
图文详解Javascript中的上下文和作用域
Feb 15 Javascript
Vue.js学习笔记之修饰符详解
Jul 25 Javascript
React-Native 组件之 Modal的使用详解
Aug 08 Javascript
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
基于layui数据表格以及传数据的方式
Aug 19 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
JS实现横向轮播图(中级版)
Jan 18 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
Aug 17 #Javascript
如何用js控制css中的float的代码
Aug 16 #Javascript
javascript 函数式编程
Aug 16 #Javascript
总结AJAX相关JS代码片段和浏览器模型
Aug 15 #Javascript
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
Aug 15 #Javascript
用javascript实现给图片加链接
Aug 15 #Javascript
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
Aug 15 #Javascript
You might like
PHP n个不重复的随机数生成代码
2009/06/23 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
django定期执行任务(实例讲解)
2017/11/03 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
详解Python IO口多路复用
2020/06/17 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
信息管理应届生求职信
2014/03/07 职场文书
爱情保证书
2015/01/17 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
mysq启动失败问题及场景分析
2021/07/15 MySQL
Python PIL按比例裁剪图片
2022/05/11 Python