很久以前就拜读并使用过“我佛山人”兄弟的页面验证脚本(Validator v1.05),感觉功能强大的同时也感觉到有很多不够完善和人性的地方,此次由于系统开发的需要,因而对该脚本进行了较大规模的修改,主要实现了如下几个功能:
1、可对同一控件进行复合式验证:
页面:min="8" max="8" datatype="Require,LimitB" msg="“提货单号”不允许为空!,“提货单号”长度输入错误,应等于8个字符!"
var _dataType = getAttribute("datatype");
if(_dataType ==null ) continue;
this.ClearState(obj.all[i]);
if(getAttribute("require") == "false" && value == "") continue;
var datatype = obj2str(_dataType).split(",");
for(var j=0;j<datatype.length;j++){
var _type = datatype[j];
if(typeof(_type) == "object" || typeof(this[_type]) == "undefined") continue;
switch(datatype[j]){..........................
2、修正重复提交后不能进行验证的问题:
对于一个页面未做处理进行连续提交时,原JS脚本对第二次提交的页面不进行验证,经过分析发现在进行第一次提交后,datatype变成了Object类型,因此再第二次提交时无法获取验证类型。
通过以下方法将对象转化为字符串
function obj2str(o){
var r = [];
if(typeof o == "string" || o == null) {
return o;
}
if(typeof o == "object"){
for(var i =0;i<o.length;i++){
r[r.length]=obj2str(o[i]);
r[r.length]=",";
}
var str = r.join("");
return str.substring(0,str.lastIndexOf(','));
}
return o.toString();
}
3、设置错误控件背景颜色,同时增加onchange事件,可以与页面中已经定义的onchange事件兼容。
for(var i=1;i<errCount;i++){
this.ErrorItem[i].style.background = "#F5A89A";
if(this.ErrorItem[i].onchange!=null){
if(obj2str(this.ErrorItem[i].onchange).indexOf("this.style.background =/"/"")==-1){
var change = obj2str(this.ErrorItem[i].onchange);
this.ErrorItem[i].setAttribute("event",change.substring(change.indexOf('{')+1,change.lastIndexOf('}')));
this.ErrorItem[i].οnchange=this["OnChange"];
}
}
else{
this.ErrorItem[i].οnchange=this["OnChange"];
}
}
OnChange:function(){
eval(this.event);
this.style.background ="";
}