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 相关文章推荐
javascript GUID生成器实现代码
Oct 31 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
Mar 29 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
JavaScript 冒泡排序和选择排序的实现代码
Sep 03 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
纯原生js实现table表格的增删
Jan 05 Javascript
NW.js 简介与使用方法
Feb 01 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
Vue作用域插槽slot-scope实例代码
Sep 05 Javascript
小程序云开发之用户注册登录
May 18 Javascript
vue实现登陆页面开发实践
May 30 Vue.js
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常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
jquery移动节点实例
2015/01/14 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
python模块restful使用方法实例
2013/12/10 Python
numpy数组拼接简单示例
2017/12/15 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Python 中如何写注释
2020/08/28 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
英文简历自荐信范文
2013/12/11 职场文书
测控技术自荐信
2014/06/05 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
好人好事新闻稿
2015/07/17 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android