注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

全功能验证插件:jquery.SeparateValidate.js  

2011-07-11 14:59:11|  分类: web前端技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
SeparateValidate_api.
jquery.SeparateValidate.js(以下简称SV)是一款纯面向对象开发的基于jquery框架的表单验证插件,拥有完整的验证功能和可扩展性,相比传统的表单验证插件优势明显,而且很容易二次开发。目前正在debug中,基本功能在FF下已经完全测试通过。
我们先来看看传统的表单验证插件的劣势:
1、    有很多网站是会根据判断用户名或是密码等等方式,写了好多个例如:function check_username(v){…}或是function check_password(v){…}等等用来判断用户名或是密码。这样可能username需要判断一次长度或是是否为空,而password也可能判断一次,造成了不必要的浪费。SV插件则完全摒弃那类面向过程开发模式,将核心函数精简,利用传参调用的方式整合很多验证程序,大大减少代码,提高效率。
2、    传统的验证插件往往将提示错误语和调用放在一个地方,当页面比较多时修改某一个错误语可能导致要找很多页面,容易遗漏。SV插件将错误语和提示语整合,能做到改一处则改全站,同时又支持用户在单个页面的自定义提示错误语,灵活机动。
3、    传统插件对于一般小型项目,比如活动页面等的验证也需要像开发大项目那样写验证,造成效率地下,SV插件智能的默认设置,对于配置好的SV插件只需要调用默认svalidate方法既可以实现基本需求功能。
4、    整个SV插件只是扩展了jquery对象的svalidate方法,不像传统验证插件有很多验证方法,最小程度的避免污染命名空间。
5、    传统插件对于扩展做的并不是很好,SV插件对于扩展支持对比,正则,AJAX三项多种搭配的验证,能够应付各种情况
6、    传统插件往往就是验证文本框输入是否正确,SV插件验证包括了textarea的字节长度验证,select选择框的验证,checkbox的验证等多种FORM元素验证
7、    SV插件还包括form表单提交的整体验证,并且整合了一次提交功能,避免在form表单提交时,用户误操作多次提交导致失败的情况
注意:本插件还有进一步优化的空间,不过由于日益强大的浏览器JS引擎,目前运行速度已经让人满意了。

HTML代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 </head>

 <body>
<form id="form" action="submit.html" method="post" onSubmit="return true;">


<table width="800" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="11%">username</td>
    <td width="29%" height="50"><input name="username" id="username" type="text" value="" /></td>
    <td width="60%" height="50"><div id="username_m" sv="sv_tips"></div></td>
  </tr>
    <tr>
    <td width="11%">username2</td>
    <td width="29%" height="50"><input name="username2" id="username2" type="text" value="" /></td>
    <td width="60%" height="50"><div id="username2_m" sv="sv_tips"></div></td>
  </tr>
   <tr>
    <td>password</td>
    <td height="50"><input name="password" id="password" type="text" value="" /></td>
    <td height="50"><div id="password_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>repassword</td>
    <td height="50"><input name="repassword" id="repassword" type="text" value="" /></td>
    <td height="50"><div id="repassword_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>select</td>
    <td height="50"><select name="select" id="select">
    <option value="-1">11</option>
    <option value="22222">22</option>
    </select></td>
    <td height="50"><div id="select_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>img</td>
    <td height="50"><input name="img" id="img" type="file" value="" /></td>
    <td height="50"><div id="img_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>mobile</td>
    <td height="50"><input name="mobile" id="mobile" type="text" value="" /></td>
    <td height="50"><div id="mobile_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>phone</td>
    <td height="50"><input name="phone" id="phone" type="text" value="" /></td>
    <td height="50"><div id="phone_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>email</td>
    <td height="50"><input name="email" id="email" type="text" value="" /></td>
    <td height="50"><div id="email_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>name</td>
    <td height="50"><input name="name" id="name" type="text" value=""/></td>
    <td height="50"><div id="name_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>identitycard</td>
    <td height="50"><input name="identitycard" id="identitycard" type="text" value="" /></td>
    <td height="50"><div id="identitycard_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>validate</td>
    <td height="50"><input name="validate" id="validate" type="text" value="" /></td>
    <td height="50"><div id="validate_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>textarea</td>
    <td height="50"><textarea name="textarea" id="textarea"  cols="" rows=""></textarea></td>
    <td height="50"><div id="textarea_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>empty</td>
    <td height="50"><input name="empty" id="empty" type="text" value="" /></td>
    <td height="50"><div id="empty_m" sv="sv_tips"></div></td>
  </tr>
  <tr>
    <td>custom</td>
    <td height="50"><input name="custom" id="custom" type="text" value="" /></td>
    <td height="50"><div id="custom_m" sv="sv_tips"></div></td>
  </tr>
    <tr>
    <td>checkbox</td>
    <td height="50"><input  name="checkbox" type="checkbox" value=""><input  name="checkbox" type="checkbox" value=""><input  name="checkbox" type="checkbox" value=""><input  name="checkbox" type="checkbox" value=""><input  name="checkbox" type="checkbox" value=""><input  name="checkbox" type="checkbox" value=""><input  name="checkbox" type="checkbox" value=""></td>
    <td height="50"><div id="checkbox_m" sv="sv_tips"></div></td>
  </tr>
 
 
     <tr>
    <td>radio</td>
    <td height="50">  <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /> <input name="radio" type="radio" value="" /></td>
    <td height="50"><div id="radio_m" sv="sv_tips"></div></td>
  </tr>
 
 
 

</table>
<input type="submit" >提交</button>
<br />
<br />
<br />
<br />
<br />
<br />


</form>
<script language="javascript" src="http://snoopyxdy.blog.163.com/blog/jquery.min.js"></script>
<script language="javascript" src="http://snoopyxdy.blog.163.com/blog/jquery.SeparateValidate.js"></script>
<script type="text/javascript">
$('#username').svalidate({check_type:'username',isajax:true,ajax_url:'./ajax.txt'})
$('#username2').svalidate({check_type:'username',isajax:true,ajax_url:'./ajax.txt',isempty:true},{username_e2:'自定义用户名长度错误'},{username_t:'自定义用户名提示'})
$('#password').svalidate({check_type:'password'})
$('#repassword').svalidate({check_type:'repassword'})
$('#select').svalidate({check_type:'select'})
$('#img').svalidate({check_type:'img'})
$('#mobile').svalidate({check_type:'mobile'})
$('#phone').svalidate({check_type:'phone'})
$('#email').svalidate({check_type:'email'})
$('#name').svalidate({check_type:'name'})
$('#identitycard').svalidate({check_type:'identitycard'})
$('#validate').svalidate({check_type:'validate'})
$('#textarea').svalidate({check_type:'textarea'})
$('#empty').svalidate({check_type:'empty'})
$('#custom').svalidate({check_type:'custom',custom_error:'自定义错误',isajax:true,ajax_url:'./ajax.txt',custom_tips:'自定义提示'})
$('input[name="checkbox"]').svalidate({check_type:'checkbox'})
$('input[name="radio"]').svalidate({check_type:'checkbox'})
$('#form').svalidate({check_type:'submit'})
</script>
 </body>
</html>

JS代码:
(function($) {
    //全局设定
var global_settings = {
        tips_tagname:'div',                //默认提示容器的标签名,用来加速脚本加载
        tips_name:'sv_tips',            //默认的提示,请在提示容器加上这个例如<div sv='sv_tips'></div>
        tips_color:'#aaa',                //提示语文字颜色
        tips_background_color:'#f0f0f0',//默认提示语的背景色
        error_color:'#DC3F41',            //错误语文字颜色
        right_img:'./true.gif',            //正确的图片
        error_img:'./false.gif',        //错误的图片
        loading_img:'./loading.gif',    //ajax读取中的图片
        variable_info:'variable_info',    //变量,替换提示语的,建议不修改
        variable_css:'variable_css',    //变量,替换背景图,建议不修改
        variable_height:'30px',                //提示容器的高度,默认为30px
        variable_padding:'0 0 0 25px',        //错误文字给前面错误图片空出的padding值,默认为25px
        prompter: function(){
            var str = '<div style="width:220px;display:block;position:absolute;top:-15px;padding-left:10px;zoom:1;"><span  style="line-height:29px; display:block;'+global_settings.variable_css+'"><span name="info_word">'+global_settings.variable_info+'</span></span></div>';
            return str;
            },//此项里面的STR为可替换,可以替换称任意存放错误提示或正确信息的容器
        submit_func:'',//表单验证通过以后,用户自定义函数,可以将AJAX的FORM提交放在这里,如果是AJAX提交请将form的onsubmit设置为false
        error_num:0    //全局变量用来存放是否有错误,勿修改!
    }
//全局设定   

$.fn.svalidate = function(settings, error, tips) {
var self = this;            //this,jquery对象
var default_settings = {
        check_type:'',        //判断类型,详见附表一
            isajax:true,        //是否需要ajax验证,true是需要ajax!
            ajax_async:true,        //AJAX是否异步,true是可以异步,FALSE是同步
            ajax_receive_type:'json',  //服务器返回数据格式
            ajax_url:'',  //AJAX发送请求的URL地址
            ajax_send_data:function(){return self.val();},  //向服务器发送的数据,默认是直接发送input值
            ajax_send_type:'get',  //服务器发送数据的方式
            ajax_error:function(){alert('ajax_error')}, //AJAX报错
            ajax_success:'',     //AJAX成功以后自定义回调函,例如function(d){一些处理,最后return true or false}插件会根据返回值判断正确或错误
            ajax_receive_data:function(d){
                return d.d.errorcode;
                }, //返回的数据格式           
            ajax_right_judge:'200',                    //返回表示正确的错误码
        isempty:true,        //判断是否可以为空,true是可以为空
        mclength:6,            //最少字符串长度
        clength:30,            //最多字符串长度
        mblength:0,            //最少字节长度
        blength:150,        //最多字节长度
        str_num:2,            //一个汉字等于几个字节,有些数据库1个汉字为3个字节,例如DISCUZ!
        sel_wrong_val:-1,   //下拉选择框默认错误的值
        origin:function(){return $("#password").val()||''},    //默认重复数据的源
        img_extension:['gif','jpg','png'],  //有几种图片的后缀名
        tip_id:function(){
            if (this.check_type==='checkbox'){return self.attr('name')+'_m'}
            return self.attr('id')+'_m'},  //提示信息的DIV ID
        tips: function(){return this.check_type+"_t";},  //默认提示信息的对象属性名字
        custom_error:'',   //用户自定义错误提示
        custom_tips:'',        //用户自定义提示
        reg_username:/^[a-zA-Z]{1}([a-zA-Z0-9]|[_]){5,24}$/,    //默认的通行证正则
        reg_password:/^([a-zA-Z0-9]|[_]){1,24}$/,    //默认的密码正则
        reg_email:/^\w+((-|\.)\w+)*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/,    //默认的邮箱正则
        reg_name:/这里放中文的正则,网易编辑器不允许放!日!/,  //默认真实姓名正则
        reg_mobile:/^1[3|4|5|8][0-9]\d{4,8}$/,//默认手机号码的正则
        reg_phone:/^([0-9]|[-+]){1,20}$/,  //默认电话号码正则包括手机和固话
        reg_validate:/\w/, //验证码正则
        reg_custom:/\S/    //扩展类,如果预设不满足,用可以自己插入正则进行判断
}

/*
附表1:(default_settings.check_type)
username:检查用户名;
password:检查密码;
repassword:检查重复密码
select:检查下拉菜单
img:检查图片后缀名
mobile:检查手机号码
phone:电话号码
email:检查电邮
name:检查真实姓名或昵称
identitycard:检查身份证
validate:检查验证码
textarea:多行文本,例如留言板
empty:检查是否为空
checkbox:检查checkbox和radion群组是否勾选,
custom:用户自定义,目前仅支持正则表达式(这里可以扩展一下),仅支持input type="text"
submit:submit!FORM提交
*/

$.extend(default_settings, settings||{});  //将用户设置扩展到默认设置中去
var input_object = new Validate_input(self, default_settings); //实例化
//错误信息
var c_error = {
    username_e1:'通行证不能为空',
    username_e2:'通行证长度最少应该6位',
    username_e3:'您填写的通行证格式不正确',
    username_e4:'这个通行证已经被人使用了',
    password_e1:'密码不能为空',
    password_e2:'密码长度最少应该6位',
    password_e3:'您填写的密码格式不正确',
    repassword_e1:'确认密码不能为空',
    repassword_e2:'您两次填写的密码不一致',
    select_e1:'请选择!',
    img_e1:'您还没有选择图片',
    img_e2:'只能上传gif和jpg格式的图片哦',
    mobile_e1:'您填写的手机号码格式不正确',
    phone_e1:'您填写的电话号码不正确',
    email_e1:'邮箱不能为空',
    email_e2:'您填写的邮箱格式不正确',
    email_e3:'该email地址已经被使用了',
    name_e1:'昵称不能为空',
    name_e2:'您填写的昵称格式不正确',
    name_e3:'这个昵称太受欢迎,已被人使用了',
    identitycard_e1:'您填写的身份证号码不正确',
    validate_e1:'验证码不能为空',
    validate_e2:'您填写的验证码不正确',
    textarea_e1:'问题描述不能为空',
    textarea_e2:'问题描述不能超过300个字',
    empty_e1:'此项不能为空',
    checkbox_e1:'此项必选',
    custom_e1:default_settings.custom_error//用户扩展
}
//错误信息

//提示信息
var c_tips = {
         blank:'',
         username_t:"? 通行证长度6-25位<Br/>? 以字母开头<Br/>? 包括字母、数字和下划线",
         password_t:"? 密码为长度6-20位的半角字符<Br />? 密码区分大小写<Br/>? 包括字母、数字、下划线、点、问号和连接线",
         repassword_t:"? 请重复一遍您的密码",
         email_t:"? 请填写你的常用邮箱(推荐QQ邮箱)<Br/>? 一个邮箱只能注册一个通行证<Br/>? 注册完成后请手动完成邮箱绑定",
         name_t:"? 请填写您的真实姓名",
         identitycard_t:"? 请填写15或18位的身份证号码<Br/>? 身份证将作为您的防沉迷资料",
         validate_t:"? 请填写下面图片中的验证码",
         textarea_t:"? 请填写详细的问题描述<Br/>? 300个字符以内",
         empty_t:"此项不能为空",
         mobile_t:"请输入手机号码",
         phone_t:"请输入电话号码",
         custom_t:default_settings.custom_tips//用户扩展
}
//提示信息
$.extend(c_error, error||{});  //将用户设置扩展到默认设置中去
$.extend(c_tips, tips||{});  //将用户设置扩展到默认设置中去

/************以下是代码部分,可以被压缩************/
//根据check_type来分流
var check = function(df){   
    input_object.error = 0;
    var docheckempty = function(p){
        var r = input_object.check_empty(p, df.isempty);
        if(r==='jump'){return true;}
        return false;
        }
    switch(df.check_type){
        case 'username':
            if(docheckempty('username_e1')){break;}
            if(input_object.error===0){input_object.check_clength(df.mclength, df.clength, 'username_e2');}else{break;}
            if(input_object.error===0){input_object.check_reg(df.reg_username, 'username_e3');}else{break;}
            if(input_object.error===0 && df.isajax && input_object.value() != input_object.oldvalue){input_object.ajax(df, 'username_e4');}else{break;}
            break;
        case 'password':
            if(docheckempty('password_e1')){break;}
            if(input_object.error===0){input_object.check_clength(df.mclength, df.clength, 'password_e2');}else{break;}
            if(input_object.error===0){input_object.check_reg(df.reg_password, 'password_e3');}else{break;}
            break;   
        case 'repassword':
            if(docheckempty('repassword_e1')){break;}
            if(input_object.error===0 && df.origin() !== ''){input_object.check_same(df.origin(), 'repassword_e2');}
            break;
        case 'select':
            input_object.check_select(df.sel_wrong_val, 'select_e1')
            break;   
        case 'img':
            if(docheckempty('img_e1')){break;}
            if(input_object.error===0){input_object.check_img(df.img_extension, 'img_e2');}
            break;   
        case 'mobile':
            if(docheckempty('mobile_e1')){break;}
            if(input_object.error===0){input_object.check_reg(df.reg_mobile, 'mobile_e1');}else{break;}
            break;   
        case 'phone':
            if(docheckempty('phone_e1')){break;}
            if(input_object.error===0){input_object.check_reg(df.reg_phone, 'phone_e1');}else{break;}
            break;   
        case 'email':
            if(docheckempty('email_e1')){break;}
            if(input_object.error===0){input_object.check_reg(df.reg_email, 'email_e2');}else{break;}
            if(input_object.error===0 && df.isajax && input_object.value() != input_object.oldvalue){input_object.ajax(df, 'email_e3');}else{break;}
            break;   
        case 'name':
            if(docheckempty('name_e1')){break;}
            if(input_object.error===0){input_object.check_reg(df.reg_name, 'name_e2');}else{break;}
            if(input_object.error===0 && df.isajax && input_object.value() != input_object.oldvalue){input_object.ajax(df, 'name_e3');}else{break;}
            break;   
        case 'identitycard':
            if(docheckempty('identitycard_e1')){break;}
            input_object.check_identitycard('identitycard_e1');
            break;       
        case 'validate':
            if(docheckempty('validate_e1')){break;}
            if(input_object.error===0){input_object.check_reg(df.reg_validate, 'validate_e2')}else{break;}
            if(input_object.error===0 && df.isajax && input_object.value() != input_object.oldvalue){input_object.ajax(df, 'validate_e2');}else{break;}
            break;   
        case 'textarea':
            if(docheckempty('textarea_e1')){break;}
            if(input_object.error===0){input_object.check_blength(df.mblength, df.blength, df.str_num, 'textarea_e1');}else{break;}
            break;   
        case 'empty':
            input_object.check_empty('empty_e1', false);
            break;   
        case 'custom':
            if(docheckempty('custom_e1')){break;}
            if(input_object.error===0){
                    var same = settings.origin || false;
                    if(same  && df.origin() !== ''){
                        input_object.check_same(df.origin(), 'custom_e1')
                        }
                    else{
                        input_object.check_reg(df.reg_custom, 'custom_e1');
                    }
            }
            if(input_object.error===0 && df.isajax && input_object.value() != input_object.oldvalue){input_object.ajax(df, 'custom_e1');}else{break;}
            break;   
        case 'checkbox':
            input_object.check_checkbox('checkbox_e1');
            break;       
        }
    if(input_object.error===0){return true;}
    else {global_settings.error_num++;return false;}
    };
//根据check_type来分流

//初始化绑定函数
    var binder = function(){
        var tagname = self.attr('tagName');
        if(self.attr('type')==='file' || tagname === 'SELECT' ){
            self.change(function(){
                check(default_settings);
                });
                return ;           
            }
        //如果是文件上传或者下拉菜单
        else if(self.attr('type')==='checkbox'||self.attr('type')==='radio'){
            self.each(function(){
                    $(this).click(function(){
                        check(default_settings);
                    })
                })
            }//如果是checkbox
        else if(tagname === 'INPUT' || tagname === 'TEXTAREA'){
            self.bind({
                focus:function(){
                    input_object.input_tips(default_settings.tips());
                    },
                blur:function(event, noasync, submit_check){
                    var submit_check = submit_check || false;
                    var noasync = noasync || false;
                    var settings = default_settings;
                    if(noasync===true){
                        var inherit = function(o){
                            var f=function(){};
                            f.prototype=o;
                            return new f();
                            }
                        var settings_noasync = inherit(default_settings);//复制对象
                        settings_noasync.ajax_async = false;
                        settings = settings_noasync;                       
                        }
                    if(input_object.value() === '' && default_settings.check_type !== 'empty' && !submit_check){input_object.input_tips('blank');return false;}
                    check(settings);
                    }   
                })
            return ;
        }//如果是input或是textarea
        else if(tagname === 'FORM'){
            self.bind({
                submit:function(){
                    global_settings.error_num = 0;
                    self.find("input[type='text'],textarea").each(function(){
                        var x = $(this).trigger("blur",[true, true]);
                            })
                    self.find("input[type='file'],select").each(function(){
                        $(this).trigger("change",[]);
                        })
                    self.find("input[type='checkbox'],input[type='radio']").each(function(){
                        $(this).triggerHandler("click");                       
                        })
                    if(global_settings.error_num!==0){return false;}
                    else{ //这里判断是使用用户自定义函数提交还是传统FORM提交
                                if(typeof submit_func === 'function'){
                                        submit_func();   
                                    }
                                else{//这里做防止多次提交的验证
                                        var bt = self.find("*[type='submit']");
                                        var bt_tagname = bt.attr("tagName");
                                        if(bt_tagname==='INPUT'){
                                            bt.val("提交中").attr("disabled","disabled")   //如果是input
                                            }
                                        else if((bt_tagname==='BUTTON')){
                                            bt.html("提交中").attr("disabled","disabled"); //如果是button
                                            }
               
                                        return true;
                                        }   
                                }
                    }
                })
            }
        //如果是input
    }()
    //初始化绑定函数

//把信息写入HTML页面的方法
function inner_message(type, id, mid, value){ //参数说明:type表示插入类型,只接收为tips,error,right,id为被验证者id,mid为提示信息id,value为提示信息内容
    var input_m_id="#"+mid;
    var input_id = "#"+id;
    var i_num = $(input_m_id).index(global_settings.tips_tagname+"[sv="+global_settings.tips_name+"]")+1
    i_num = parseInt(1/i_num*100);
    $(input_m_id).css({'z-index':i_num,
                       'display':'block',
                       'position': 'relative',
                       'zoom':'1'
    })
    var content = function(value_css, value_info){
        var str_result  = global_settings.prompter().replace(global_settings.variable_css, value_css);
            str_result = str_result.replace(global_settings.variable_info, value_info);
            return str_result;
        }
        var css_str = 'padding:'+global_settings.variable_padding+';height:'+global_settings.variable_height+';height:auto  !important;min-height:'+global_settings.variable_height+' !important;'
    if(type==='tips'){
        $(input_m_id).css('border-color','');
        var value_info = '<span style="color:'+global_settings.tips_color+'">'+value+'</span>'
        var value_css = 'background-color:'+global_settings.tips_background_color+';height:auto  !important'
        }
    else if(type==='error'){
        $(input_m_id).css('border-color',global_settings.error_color);
        var value_info = '<span style="color:'+global_settings.error_color+'">'+value+'</span>'
        var value_css = 'background: url('+global_settings.error_img+') no-repeat  left top;'+css_str
        }
    else if(type==='right'){
        var value_info = '&nbsp;'
        var value_css = 'background: url('+global_settings.right_img+') no-repeat  left top ;'+css_str
        }
    else if(type==='loading'){
        var value_info = '&nbsp;'
        var value_css = 'background: url('+global_settings.loading_img+') no-repeat  left top ;'+css_str
        }
    $(input_m_id).html(content(value_css, value_info));
}
//把信息写入HTML页面的方法

//判断验证核心代码
function Validate_input(self, df){
            this.o = self;
            var typeer = this.o.attr('type');
        if(this.o.length===1&&typeer!='checkbox'&&typeer!='radio'){
            this.value = function(){return $.trim(this.o.val())};
            this.id = this.o.attr('id')
            this.oldvalue = '';
        }
        this.error = 0;
        this.settings = df;
    }
Validate_input.prototype.input_error = function(p){
        inner_message('error', this.id, this.settings.tip_id(), c_error[p]);
    }
Validate_input.prototype.input_tips = function(p){
        inner_message('tips', this.id, this.settings.tip_id(), c_tips[p]);
    }
Validate_input.prototype.input_right = function(){
        inner_message('right', this.id, this.settings.tip_id(), '');
    }
Validate_input.prototype.input_loading = function(){
        inner_message('loading', this.id, this.settings.tip_id(), '');
    }

Validate_input.prototype.ajax = function(settings, error_property){
        var that = this;
        $.ajax({
            async: settings.ajax_async,            //是否同步默认应为异步
            dataType : settings.ajax_receive_type,    //期望服务器返回的数据,默认为json
            url: settings.ajax_url,            //AJAX发送请求的URL地址
            data: settings.ajax_send_data(),        //AJAX发送的数据包
            type: settings.ajax_send_type,        //传送方式,默认为get
            beforeSend:function(){
                that.input_loading();
                },
            error: function (){                //AJAX出错调用的方法
                settings.ajax_error();
                },
            success : function(data){        //AJAX成功调用的方法
                if(settings.ajax_receive_type === 'json' && typeof settings.ajax_success != 'function'){
                var d_property = settings.ajax_receive_data(data);
                    if(d_property != settings.ajax_right_judge){
                        that.error++;
                        that.input_error(error_property);
                        return false;
                        }           
                else{
                        that.input_right();
                        that.oldvalue = that.value();
                        return true;
                        }
                }//如果接收的数据为json并且ajax_success不存在,使用默认函数来处理
                else if(typeof settings.ajax_success == 'function'){
                    if(!settings.ajax_success(data)){
                        that.error++;
                        that.input_error(error_property);
                        return false;
                    }
                        that.input_right();
                        that.oldvalue = that.value();
                        return true;
                }//使用用户自定义函数来处理
            return false;
             }//AJAX成功回调结束
        });   
    }//AJAX的验证


Validate_input.prototype.check_clength = function(mclength, clength, error_property){
            if(this.value().length < mclength || this.value().length >clength){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
            this.input_right();
    };//判断字符长度

Validate_input.prototype.check_blength = function(mblength, blength, str_num, error_property){
            var rstr = ""
            for (var i=0; i<str_num; i++){
                rstr += '*';
                }
            var lenreg = this.value().replace(/[^x00-xFF]/g, rstr).length
            if(lenreg < mblength || lenreg >blength){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
            this.input_right();
    };//判断字节长度


Validate_input.prototype.check_checkbox = function(error_property){
            var r_count = 0
            this.o.each(function(){
                if($(this).attr("checked")){
                        r_count++;
                    }
                })
            if(r_count===0){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
            this.input_right();
            return true;
    } //判断多选框


Validate_input.prototype.check_empty = function(error_property, isempty){
            if(this.value() == '' && !isempty){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
            else if(this.value() == '' && isempty){
                this.input_right();
                return 'jump';
                }
            this.input_right();
            return true;
    } //判断是否为空

Validate_input.prototype.check_reg = function(reg, error_property){
            if(reg.exec(this.value()) === null){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
            this.input_right();
    }    //判断正则表达式


Validate_input.prototype.check_select = function(wrong_value, error_property){
            var select_val =  this.o.find("option:selected").val();
            if(select_val == wrong_value){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
            this.input_right();
    }    //判断下拉框


Validate_input.prototype.check_same = function(o_value, error_property){
            if(this.value() !== o_value){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
            this.input_right();   
    }  //判断2个输入框是否相同


Validate_input.prototype.check_img = function(namearray, error_property){
    var img_error = true;
    var filedoc=(this.value().substring(this.value().length-3,this.value().length)).toLowerCase();;
    for (var i=0; i<namearray.length; i++){
            if(filedoc === namearray[i]){
                    img_error = false;
                    break;
                }
        }
    if(img_error){
                this.error++;
                this.input_error(error_property);
                return false;
        }
        this.input_right();   
    };//判断图片后缀名


Validate_input.prototype.check_identitycard = function(error_property){
            var val = this.value().toLowerCase();
            if (val.length!=15&&val.length!=18){
                    this.error++;
                    this.input_error(error_property);
                    return false;
                }
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙 江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖 北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西 藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
            if(aCity[parseInt(val.substr(0,2))]==null){
                this.error++;
                this.input_error(error_property);
                return false;
        }
    var IsNumeric = function(oNum){
      if(!oNum) return false;
      var strP=/^\d+(\.\d+)?$/;
      if(!strP.test(oNum)) return false;
      try{if(parseFloat(oNum)!=oNum) return false;}
      catch(ex){return false;}
      return true;
    }
    var IsValidDate = function(Year,Month,Day){
        var isdate = Year+"/"+Month+"/"+Day
        var isdate2 = new  Date(isdate);
        yyyy=String(isdate2.getFullYear())
        mm = (isdate2.getMonth()+1)<10?"0"+String(isdate2.getMonth()+1):String(isdate2.getMonth()+1)
        dd = isdate2.getDate()<10?"0"+String(isdate2.getDate()):String(isdate2.getDate())
        isdate2 = yyyy+"/"+mm+"/"+dd;
        if(isdate!=isdate2){return false;}
        return true;
    }       
    var Ai;
    if(val.length==18){Ai = val.substring(0,17);}
    else {Ai =val.substring(0,6)+"19"+val.substring(6,12);}
    if(IsNumeric(Ai) === false){
            this.error++;
            this.input_error(error_property);
            return false;
    }
    var strYear,strMonth,strDay,strBirthDay;
    strYear = Ai.substr(6,4);
    strMonth =Ai.substr(10,2) ;
    strDay = Ai.substr(12,2);
    this.birthday = strYear+"/"+strMonth+"/"+strDay
    if (IsValidDate(strYear,strMonth,strDay)==false){
            this.error++;
            this.input_error(error_property);
            return false;
    }
    var arrVerifyCode = new Array("1","0","x","9","8","7","6","5","4","3","2");
    var Wi = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
    var k,TotalmulAiWi=0;
        for (k=0; k<17;k++){
         TotalmulAiWi = TotalmulAiWi + parseInt(Ai.substr(k,1)) * Wi[k];
         }     
    var modValue =TotalmulAiWi % 11 ;
    var strVerifyCode = arrVerifyCode[modValue];
    Ai = Ai+strVerifyCode;             
      if((val.length==18)&&(val!=Ai)){
            this.error++;
            this.input_error(error_property);
            return false;
        }   
    this.input_right();   
};  //判断身份证

//判断验证核心代码

}
})(jQuery);
  评论这张
 
阅读(2779)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016