html:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>实现带样式的表单验证</title>
<link rel="Stylesheet" href="css/3.css" />
</head>
<body>
<form id="form1">
<h2>增加管理员</h2>
<table>
<tr>
<td>姓名:</td>
<td>
<input name="username"/>
<span>*</span>
</td>
<td>
<div class="vali_info">
10个字符以内的字母、数字或下划线的组合
</div>
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<input type="password" name="pwd"/>
<span>*</span>
</td>
<td>
<div class="vali_info">6位数字</div>
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
<input type="button" value="保存"/>
<input type="reset" value="重填"/>
</td>
</tr>
</table>
</form>
<script src="js/3.js"></script>
</body>
</html>
js:
//Step1:为name为username和pwd的文本框绑定获得焦点事件
var form=document.forms[0];
var txtName=form.username;
var txtPwd=form.pwd;
//获得焦点时的事件
txtName.onfocus=getFocus;
txtPwd.onfocus=getFocus;
function getFocus(){
//this->当前文本框
//当前文本框边框加粗
this.className="txt_focus";
//清除旁边div的class
var div=this.parentNode
.nextElementSibling
.firstElementChild;
div.className="";
}
//txtName失去焦点时
txtName.onblur=function(){
vali(this,/^\w{1,10}$/);
}
function vali(txt,reg){
//清除当前文本框的class
txt.className="";
//获取旁边div
var div=txt.parentNode
.nextElementSibling
.firstElementChild;
//用reg测试当前文本框的内容
//如果通过,就修改div的class为vali_success
if(reg.test(txt.value)){
div.className="vali_success";
return true;
//否则修改div的class为vali_fail
}else{
div.className="vali_fail";
return false;
}
}
txtPwd.onblur=function(){
vali(this,/^\d{6}$/);
}
//单机保存时
form.elements[form.length-2].onclick=function(){
//选验证所有文本框
//var rName=vali(txtName,/^\w{1,10}$/);
//var rPwd=vali(txtPwd,/^\d{6}$/);
//if(rName==rPwd==true){//如果验证通过
// form.submit();//提交表单
//}
//如果txtName和txtPwd未验证通过,则不可提交
if(!vali(txtName,/^\w{1,10}$/)){
txtName.focus();//让txtNmame获得焦点
}else if(!vali(txtPwd,/^\d{6}$/)){
txtPwd.focus();
}else{
form.submit();//提交
}
}