这次成型的验证类还算比较满意了。只要把form的id传进去,然后添加验证事件,最后format一下就OK了,也不用再另外手动添加什么代码了。直接把html代码弄过来好了。
  1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2<html xmlns="http://www.w3.org/1999/xhtml">
  3
  4<head>
  5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6<title>Untitled 1</title>
  7<style type="text/css">
  8.validator {
  9    font-family: "Courier New";
 10    font-size: 12px;
 11    color: #FF0000;
 12    padding-left: 4px;
 13}

 14.validator img {
 15    vertical-align: middle;
 16    width: 12px;
 17    height: 12px;
 18}

 19
</style>
 20<script language="javascript" type="text/javascript">
 21    function $(id){return document.getElementById(id)};
 22    var isIE=(navigator.appName.indexOf("Microsoft")!=-1 && !window.opera)?true:false;
 23    
 24    function Validator(formid){
 25        var _base=this;
 26        var form=$(formid);
 27        var _validControlTag="__v";
 28        var _validControlClass="validator";
 29        var _validMsgTag="<img src=\"Images/Warning.gif\" alt=\"警告信息\">&nbsp;";
 30        
 31        form.onsubmit=validForm;
 32        
 33        var _ControlArr=new Array();
 34        
 35        //验证所有的控件
 36        function validForm(){
 37            var pass=true;
 38            for(var i=0;i<_ControlArr.length;i++){
 39                if(!doValid(i)) pass=false;
 40            }

 41            return pass
 42        }

 43        
 44        function showArr(){
 45            for(var i=0;i<_ControlArr.length;i++){
 46                document.write(_ControlArr[i][0+ ":<br/>");
 47                for(var j=0;j<_ControlArr[i][1].length;j++){
 48                        document.write(_ControlArr[i][1][j] + "<br/>");
 49                }

 50            }

 51        }

 52        
 53        //添加验证事件
 54        this.addValid=function(id,type,msg){
 55            var validId;     //用来验证的控件
 56            var helpId;        //用来辅助的控件
 57            if(typeof(id)=="object"){
 58                validId=id[0];
 59                helpId=new Array();
 60                for(var i=1;i<id.length;i++){
 61                    helpId.push(id[i]);
 62                }

 63            }
else{
 64                validId=id;
 65                helpId="";
 66            }

 67            //添加进数组
 68            var index=findIndex(validId);
 69            if(index!=-1){
 70                _ControlArr[index][1].push(new Array(helpId,type,msg));
 71            }
else{
 72                _ControlArr.push(new Array(validId,new Array(new Array(helpId,type,msg))));
 73            }

 74            //绑定验证事件
 75            //bindValid(validId,helpId,type,msg);
 76        }

 77        
 78        //给各个控件绑定验证事件
 79        this.format=function(){
 80            //showArr();
 81            for(var i=0;i<_ControlArr.length;i++){
 82                bindValid(i);
 83            }

 84        }

 85        
 86        //查找id对应的数组位置
 87        function findIndex(id){
 88            for(var i=0;i<_ControlArr.length;i++){
 89                if(_ControlArr[i][0]==id)return i;
 90            }

 91            return -1;//没有找到的话返回-1
 92        }

 93        
 94        //绑定验证事件
 95        function bindValid(index){
 96            var pass=true;
 97            
 98            addEmptyTag(index);
 99            
100            var validId=_ControlArr[index][0];
101            var ctlId=_validControlTag + validId;
102            var ctl=document.createElement("span");
103            ctl.id=ctlId;
104            ctl.className=_validControlClass;
105            var obj=$(validId);
106            obj.parentNode.appendChild(ctl);
107
108            if(isIE){
109                obj.attachEvent("onblur",function(){
110                    if(!doValid(index)) pass=false;
111                }
);
112            }
else{
113                obj.addEventListener("blur",function(){
114                    if(!doValid(index)) pass=false;
115                }
,false);
116            }

117            return pass;
118        }

119        
120        //添加不允许为空的标志
121        function addEmptyTag(index){
122            for(var i=0;i<_ControlArr[index][1].length;i++){
123                if(_ControlArr[index][1][i][1]=="empty")break;                    
124            }

125            if(i<_ControlArr[index][1].length){
126                var tag=document.createElement("tag");
127                tag.appendChild(document.createTextNode("*"));
128                tag["style"]["color"]="#FF0000";
129                $(_ControlArr[index][0]).parentNode.appendChild(tag);
130            }

131        }

132        
133        //作出实际的验证部分
134        function doValid(index){
135            var pass=true;
136            var obj=$(_ControlArr[index][0]);
137            var ctl=$(_validControlTag + _ControlArr[index][0]);
138            for(var i=0;i<_ControlArr[index][1].length;i++){
139                var helpId=_ControlArr[index][1][i][0];
140                var msg=_ControlArr[index][1][i][2];
141                switch(_ControlArr[index][1][i][1]){
142                    case "empty":
143                        if(onBlur(obj.value=="",ctl,msg)) pass=false;
144                        break;
145                    case "equal":
146                        var help=$(helpId[0]);
147                        if(onBlur(obj.value!=help.value,ctl,msg)) pass=false;
148                        break;
149                    case "email":
150                        if(obj.value!="" && onBlur(!/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(obj.value),ctl,msg)) pass=false;
151                        break;
152                }

153            }

154            return pass;
155        }

156        
157        //鼠标离开控件时作出的反应
158        function onBlur(bool,ctl,msg){
159            var html=ctl.innerHTML;
160            if(bool){
161                if(!html)
162                    ctl.innerHTML=_validMsgTag + msg;
163                else if(html.indexOf(msg)==-1){
164                    ctl.innerHTML+="&nbsp;&nbsp;" + msg;
165                }

166            }
else{
167                if(html && html.indexOf(msg)!=-1)
168                    ctl.innerHTML="";            
169            }

170            return bool;
171        }

172        
173    }

174    
175    window.onload=function(){
176        var vld=new Validator("formLogin");
177        vld.addValid("txtName","empty","用户名不能为空");
178        vld.addValid("txtPassword","empty","密码不能为空");
179        vld.addValid("txtRePassword","empty","确认密码不能为空");
180        vld.addValid(["txtRePassword","txtPassword"],"equal","两次输入的密码不一致");
181        vld.addValid("txtEmail","empty","Email不能为空");
182        vld.addValid("txtEmail","email","Email格式不对");
183        vld.format();
184    }

185
</script>
186</head>
187
188<body>
189
190<form method="post" action="?action=login" id="formLogin">
191    <div>用户名:<input type="text" id="txtName" size="10" /></div>
192    <div>密码:<input type="password" id="txtPassword" size="10"/></div>
193    <div>确认密码:<input type="password" id="txtRePassword" size="10" /></div>
194    <div>Email:<input type="text" id="txtEmail" size="20" /></div>
195
196    <input type="submit" value="Submit" />
197</form>
198
199</body>
200
201</html>
202
posted on 2006-09-18 10:14  晓寒天  阅读(301)  评论(0)    收藏  举报