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 相关文章推荐
js或css文件后面跟参数的原因说明
Jan 09 Javascript
Javascript面向对象之四 继承
Feb 08 Javascript
ie支持function.bind()方法实现代码
Dec 27 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
将list转换为json失败的原因
Dec 17 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
Jun 24 Javascript
javascript基本类型详解
Nov 28 Javascript
重新理解JavaScript的六种继承方式
Mar 24 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
Sep 10 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
微信小程序实现的canvas合成图片功能示例
May 03 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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
Python实现大文件排序的方法
2015/07/10 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Python是什么 Python的用处
2020/05/26 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
数控专业个人求职信范例
2013/11/29 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
食品安全承诺书
2014/05/22 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
读书笔记怎么写
2015/07/01 职场文书
中学教师教学工作总结
2015/08/13 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript