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 对象与DOM对象之两者相互间的转换
Apr 27 Javascript
javascript 检测浏览器类型和版本的代码
Sep 15 Javascript
js下用eval生成JSON对象
Sep 17 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
JS作用域深度解析
Dec 29 Javascript
jQuery validata插件实现方法
Jun 25 jQuery
浅谈vue.js中v-for循环渲染
Jul 26 Javascript
mock.js模拟数据实现前后端分离
Jul 24 Javascript
精读《Vue3.0 Function API》
May 20 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 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入门速成(2)
2006/10/09 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
基于Bootstrap表单验证功能
2017/11/17 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
Python代码调试的几种方法总结
2015/04/15 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
python3+PyQt5实现柱状图
2018/04/24 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
质量月活动策划方案
2014/03/10 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
2019军训心得体会
2019/06/27 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
各种货币符号快捷输入
2022/02/17 杂记