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 相关文章推荐
jValidate 基于jQuery的表单验证插件
Dec 12 Javascript
js快速排序的实现代码
Dec 08 Javascript
js中精确计算加法和减法示例
Mar 28 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
JavaScript事件代理和委托详解
Apr 08 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
深入浅析javascript中的作用域(推荐)
Jul 19 Javascript
jQuery实现碰到边缘反弹的动画效果
Feb 24 jQuery
Vue中的slot使用插槽分发内容的方法
Mar 01 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
Nov 02 Javascript
基于JS实现视频上传显示进度条
May 12 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
Oct 27 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实现链结人气统计
2006/10/09 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python isinstance函数介绍
2015/04/14 Python
Python psutil模块简单使用实例
2015/04/28 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
django删除表重建的实现方法
2019/08/28 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
python中xlrd模块的使用详解
2021/02/01 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
奥林匹克的口号
2014/06/13 职场文书
人口与计划生育责任书
2015/05/09 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
vue修饰符.capture和.self的区别
2022/04/22 Vue.js