// 校验特殊字符 @authro 李辉 2008年8月13日 var iu, iuu, specialarrays=new array("","◎","■","●","№","↑","→","↓"+ "@","#","$","%","^","&","*","'","?","~","`"+ "<",">","‰","→","←","↑","↓","¤","§","#","&","&","\","≡","≠"+ "≈","∈","∪","∏","∑","∧","∨","⊥","∥","∥","∠","⊙","≌","≌","√","∝","∞","∮"+ "∫","≯","≮",">","≥","≤","≠","±","+","÷","×","/","ⅱ","ⅰ","ⅲ","ⅳ","ⅴ","ⅵ","ⅶ","ⅷ","ⅹ","ⅻ","㈠","㈡"+ "╄","╅","╇","┻","┻","┇","┭","┷","┦","┣","┝","┤","┷","┷","┹","╉","╇","【","】"+ "㈢","㈣","㈤","㈥","㈦","㈧","㈨","㈩","①","②","③","④","⑤","⑥","⑦","⑧","⑨","⑩","┌","├","┬","┼","┍","┕","┗","┏","┅","─"+ "〖","〗","←","〓","☆","§","□","‰","◇","︿","@","△","▲","#","℃","※",".","≈","¢"); var jquery_formvalidator_initconfig; jquery.formvalidator = { sustaintype : function(id,setting) { var elem = $("#"+id).get(0); var srctag = elem.tagname; var stype = elem.type; switch(setting.validatetype) { case "initvalidator": return true; case "inputvalidator": if (srctag == "input") return true; return false; case "textareavalidator": if (srctag == "textarea") return true; return false; case "selectvalidator": if (srctag == "select") return true; return false; case "comparevalidator": if (srctag == "input" || srctag == "textarea") { if (stype == "checkbox" || stype == "radio") return false; return true; } return false; case "ajaxvalidator": return false; case "regexvalidator": if (srctag == "input" || srctag == "textarea") { if (stype == "checkbox" || stype == "radio") return false; return true; } return false; } }, initconfig : function(controloptions) { var settings = { validatorgroup : "1", alertmessage:false, onsuccess: function() {return true;}, onerror:function() {}, submitonce:false }; controloptions = controloptions || {}; jquery.extend(settings, controloptions); if (jquery_formvalidator_initconfig == null ) jquery_formvalidator_initconfig = new array(); jquery_formvalidator_initconfig.push( settings ); }, //如果validator对象对应的element对象的validator属性追加要进行的校验。 appendvalid : function(id, setting ) { //如果是各种校验不支持的类型,就不追加到。返回-1表示没有追加成功 if(!jquery.formvalidator.sustaintype(id,setting)) return -1 var srcjo = $("#"+id).get(0); if (setting.validatetype=="initvalidator" || !srcjo.settings || srcjo.settings == undefined ) srcjo.settings = new array(); srcjo.settings.push( setting ); return srcjo.settings.length - 1; }, //如果validator对象对应的element对象的validator属性追加要进行的校验。 getinitconfig : function( validatorgroup ) { if(jquery_formvalidator_initconfig!=null) { for(i=0;i= 0x4e00 && val.charcodeat(i) <= 0x9fa5) len += 2; else len++; } if (len < setting.min || len > setting.max) { setting.isvalid = false; } else { setting.isvalid = true; } } else{ stype = (typeof setting.min); if(stype =="number") { if(!isnan(val)) { nval = parsefloat(val); if(nval>=setting.min && nval<= setting.max) setting.isvalid = true; else setting.isvalid = false; } else setting.isvalid = false; } if(stype =="string"){ if(val>=setting.min && val<= setting.max) setting.isvalid = true; else setting.isvalid = false; } } break; case "checkbox": case "radio": var svalue = ""; var objs = $("input[@type='"+stype+"'][@name='"+srcjo.attr("name")+"'][@checked]"); len = objs.length; if ( len == 0 && srcjo.get(0).settings[0].empty ){ setting.isvalid = true; break; } if(len setting.max) setting.isvalid =false; else setting.isvalid = true; break; } }, //对textarea类型控件进行校验 textareavalid : function(id, setting) { var srcjo = $("#"+id); var val = $.trim(srcjo.val()); //删除左右两端的空格 @author 李辉 2008年8月6日 var len = 0 ; if(setting.special){ iuu=specialarrays.length; for(iu=1;iu<=iuu;iu++){ if (val.indexof(specialarrays[iu])!=-1){ setting.isvalid = false; return; } } } if (val.length == 0 && srcjo.get(0).settings[0].empty) { setting.isvalid = true; return; } if (setting.type == "size") {//获得输入的字符长度,并进行校验 for (var i = 0; i < val.length; i++) { if (val.charcodeat(i) >= 0x4e00 && val.charcodeat(i) <= 0x9fa5) len += 2; else len++; } if (len < setting.min || len > setting.max) { setting.isvalid = false; } else { setting.isvalid = true; } } else{ stype = (typeof setting.min); if(stype =="number") { if(!isnan(val)) { nval = parsefloat(val); if(nval>=setting.min && nval<= setting.max) setting.isvalid = true; else setting.isvalid = false; } else setting.isvalid = false; } if(stype =="string"){ if(val>=setting.min && val<= setting.max) setting.isvalid = true; else setting.isvalid = false; } } }, selectvalid : function(id, setting) { var isvalid = true; var joeach; var groupname = $("#" + id).attr("groupname"); if (null != groupname && groupname != undefined) joeach = $("select[@groupname='" + groupname + "']"); else joeach = $("#"+id); //如果存在有关联的一组下拉框,即我选了,其他的也得选 joeach.each(function(){ if ( this.options.length > 0 ){ if ($(this).val() == "" || $(this).val() == "-1") isvalid = false; else { isvalid = isvalid && true; } } else { isvalid = isvalid && true; } }); //都没有选中,并且可以为空 if (joeach.get(0).settings[0].empty && !isvalid) isvalid = true; setting.isvalid = isvalid; }, comparevalid : function(id, setting) { var srcjo = $("#"+id); var desjo = $("#"+setting.desid ); setting.isvalid = false; curvalue = srcjo.val(); ls_data = desjo.val(); //对数值型的,进行转换 if(setting.datatype=="number") { if(!isnan(curvalue) && !isnan(ls_data)) { curvalue = parsefloat(curvalue); ls_data = parsefloat(ls_data); } else { return; } } switch(setting.operateor) { case "=": if(curvalue == ls_data) setting.isvalid = true; break; case "!=": if(curvalue != ls_data) setting.isvalid = true; break; case ">": if(curvalue > ls_data) setting.isvalid = true; break; case ">=": if(curvalue >= ls_data) setting.isvalid = true; break; case "<": if(curvalue < ls_data) setting.isvalid = true; break; case "<=": if(curvalue <= ls_data) setting.isvalid = true; break; } } } //每个校验控件必须初始化的 jquery.fn.formvalidator = function( msgoptions) { var setting = { validatorgroup : "1", empty :false, submitonce : false, automodify : false, onshow :"", onfocus: "", oncorrect: "", onempty: "", // onshow :"请输入内容", // onfocus: "请输入内容", // oncorrect: "输入正确", // onempty: "输入内容为空", onvalid : function(){}, onfocusevent : function(){}, onblurevent : function(){}, validatetype : "initvalidator" }; msgoptions = msgoptions || {}; jquery.extend(setting, msgoptions); //采用映射表,合并同类项 return this.each(function() { var triggerid = this.id; jquery.formvalidator.appendvalid(triggerid,setting); if(!jquery.formvalidator.getinitconfig(setting.validatorgroup).alertmessage) { //初始化提示对象的样式和文字 var tip = $( "#"+triggerid+"tip" ); tip.html( setting.onshow ); tip.removeclass(); tip.addclass( "onshow" ); } //获得element对象 var srctag = this.tagname; if (srctag == "input" || srctag=="textarea") { var stype = this.type; var defaultval = this.value; var joeach = $(this); //只要有值,就默认算合法 if (null!= defaultval && defaultval!= undefined && defaultval!="") setting.isvalid = true; //设置默认选中的值 if (stype == "checkbox" || stype == "radio") { joeach = $("input[@name=" + this.name + "]"); //设置默认选中的值 defaultval = $(this).attr("checkedvalue"); if (null != defaultval && defaultval != undefined) { joeach.each(function(){ if (this.value == defaultval) { this.checked = "checked"; } }); } } //注册获得焦点的事件。改变提示对象的文字和样式,保存原值 joeach.focus(function() { settings = joeach.get(0).settings; if(!jquery.formvalidator.getinitconfig(setting.validatorgroup).alertmessage) { var tip = $( "#"+triggerid+"tip" ); tip.html( settings[0].onfocus ); tip.removeclass(); tip.addclass( "onfocus" ); } if (stype == "text" || stype == "textarea" || stype == "file") { this.validoldvalue = $(this).val(); } settings[0].onfocusevent(joeach.get(0)); }); //注册失去焦点的事件。进行校验,改变提示对象的文字和样式;出错就提示处理 joeach.blur(function() { var thefirstsettings = joeach.get(0).settings; var settingslen = thefirstsettings.length; var returnobj = jquery.formvalidator.oneisvalid(triggerid,1); //出错或成功的setting如果是ajax校验,就等待异步返回结果再showmessage if ( thefirstsettings[returnobj.index].validatetype != "ajaxvalidator" ) { jquery.formvalidator.showmessage(returnobj); } thefirstsettings[0].onblurevent(joeach.get(0)); }); //如果存在一组的select,则只需注册改组的第一个; } else if (srctag == "select") { //设置默认选中的值,存在就算默认校验通过 var groupname = $(this).attr("groupname"); var joeach; if (null != groupname && groupname != undefined) joeach = $("select[@groupname='" + groupname + "']"); else joeach = $(this); joeach.each( function() { var defaultval = $(this).attr('selectedvalue'); if ( null!= defaultval && defaultval!= undefined) { $.each( this.options ,function(){ if ( $.trim(this.value)==$.trim(defaultval) || this.text==defaultval ) { this.selected = true; setting.isvalid = true; } }); } }); //注册获得焦点的事件。改变提示对象的文字和样式 joeach.focus(function() { var settings = joeach.get(0).settings; if(!jquery.formvalidator.getinitconfig(setting.validatorgroup).alertmessage) { var tip = $( "#"+triggerid+"tip" ); tip.html( settings[0].onfocus ); tip.removeclass(); tip.addclass( "onfocus" ); } }); //只有进行初始化的select对象触发change事件后才进行ajax校验 joeach.bind( "change" , function(){ var settings = joeach.get(0).settings; //只取第一个select var returnobj = jquery.formvalidator.oneisvalid(triggerid,1); if ( settings[returnobj.index].validatetype != "ajaxvalidator" ) { jquery.formvalidator.showmessage(returnobj); } }); } }); }; jquery.fn.inputvalidator = function(controloptions) { var settings = { isvalid : false, min : 0, max : 99999999999999, forcevalid : false, //出错时,是否一定要输入正确为止 type : "size", defaultvalue:null, onerror:"输入错误", validatetype:"inputvalidator" }; controloptions = controloptions || {}; jquery.extend(settings, controloptions); return this.each(function(){ jquery.formvalidator.appendvalid(this.id,settings); }); } jquery.fn.textareavalidator = function(controloptions) { var settings = { isvalid : false, min : 0, max : 99999999999999, forcevalid : false, //出错时,是否一定要输入正确为止 type : "size", defaultvalue:null, onerror:"输入错误", validatetype:"textareavalidator" }; controloptions = controloptions || {}; jquery.extend(settings, controloptions); return this.each(function(){ jquery.formvalidator.appendvalid(this.id,settings); }); } //注意一点:对下拉框进行验证,不选中的时候,你设置的值必须为""或者"-1" //如果有依赖的下拉框组的话,必须设置groupname为一样 jquery.fn.selectvalidator = function(controloptions) { var settings = { isvalid : false, onerror:"必须选择", defaultvalue:null, validatetype:"selectvalidator" }; controloptions = controloptions || {}; jquery.extend(settings, controloptions); return this.each(function(){ jquery.formvalidator.appendvalid(this.id,settings); }); } //提供比较。扩展(比较大小) jquery.fn.comparevalidator = function(controloptions) { var settings = { isvalid : false, desid : "", operateor :"=", onerror:"输入错误", validatetype:"comparevalidator" }; controloptions = controloptions || {}; jquery.extend(settings, controloptions); return this.each(function(){ var li_index = jquery.formvalidator.appendvalid(this.id,settings); if(li_index==-1) return; var elem = this; //当要比较的对象失去焦点的时候,要改变tip现实的内容 $("#"+settings.desid).blur(function(){ var returnobj = jquery.formvalidator.oneisvalid(elem.id,1); if (!returnobj.isvalid && returnobj.index == li_index) { //如果是比较这里出错,就从比较这里依次触发校验 var returnobj = jquery.formvalidator.oneisvalid(elem.id, li_index); } if ( elem.settings[returnobj.index].validatetype != "ajaxvalidator" ){ jquery.formvalidator.showmessage(returnobj); } }); }); } jquery.fn.regexvalidator = function(controloptions) { var settings = { isvalid : false, regexp : "", param : "i", onerror:"输入的格式不正确", validatetype:"regexvalidator" }; controloptions = controloptions || {}; jquery.extend(settings, controloptions); return this.each(function(){ jquery.formvalidator.appendvalid(this.id,settings); }); } jquery.fn.ajaxvalidator = function(controloptions) { var settings = { isvalid : false, url : "", datatype : "resposetext", data : "html", async : true, beforesend : function(){}, success : function(){}, complete : function(){}, processdata : true, onerror:"输入的格式不正确", validatetype:"regexvalidator" }; controloptions = controloptions || {}; jquery.extend(settings, controloptions); return this.each(function(){ jquery.formvalidator.appendvalid(this.id,settings); }); }