html:
<span style="font-size:18px;"><!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>实现带样式的表单验证</title>
<link rel="Stylesheet" href="css/3_2.css" />
</head>
<body>
<form id="form1">
<h2>增加管理员</h2>
<table>
<tr>
<td>姓名:</td>
<td>
<!--当文本框获得焦点:显示提示div-->
<!--当文本框市区焦点:验证文本框内容-->
<input name="uname"
οnfοcus="show(this)"
οnblur="valiName(this)"/>
<span>*</span>
</td>
<td>
<div class="vali_Info">
10个字符以内的字母、数字或下划线的组合
</div>
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<input type="password" name="pwd"
οnfοcus="show(this)"
οnblur="valiPwd(this)"/>
<span>*</span>
</td>
<td>
<div class="vali_Info">6位数字</div>
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
<input type="submit" value="保存"/>
<input type="reset" value="重填"/>
</td>
</tr>
</table>
</form>
<script src="js/3_2.js"></script>
</body>
</html>
</span>
js:
<span style="font-size:18px;">/*
txt_focus:当文本框获得焦点时给当前文本框穿
dang文本框失去焦点,给当前文本框脱掉
vali_success:验证通过时,给旁边的div穿
vali_fail:验证失败时,给旁边的div穿
vali_Info:默认就穿在div上
当文本框获得焦点时,脱掉旁边div的衣服
*/
function show(txt){
//找到txt旁边的div,脱掉衣服
txt.parentNode
.nextElementSibling
.firstElementChild
.removeAttribute("class");
//给txt穿txt_focus
txt.setAttribute("class","txt_focus");//给txt穿txt_focus
}
function valiName(txt){
//给txt脱掉衣服
txt.removeAttribute("class");
//用/^\w{1,10}$/,(给1就是必填),验证txt内容,(内容,必须用value,因为input是非封闭式标记,所以不能用innerHTML)
//将结果保存在result中
var result=/^\w{1,10}$/.test(txt.value);
//找到txt旁边的div,则穿valid_success,否则穿vali_fail
txt.parentNode
.nextElementSibling
.firstElementChild
.setAttribute("class",result?"vali_success":"vali_fail");
return result;
}
function valiPwd(txt){
//给txt脱掉衣服
txt.className="";
//用/^\d{6}$/,验证txt的内容,将结果保存到变量result中
var result=/^\d{6}$/.test(txt.value);
//找到txt旁边的div,则穿valid_success,否则穿vali_fail
txt.parentNode
.nextElementSibling
.firstElementChild
.className=result?"vali_success":"vali_fail";
return result;
}</span>
css:
<span style="font-size:18px;">table{width:700px}
/*父元素下的第1个,第n个,最后一个td子元素*/
td:first-child{width:60px}
/*IE不支持nth-child*/
td:nth-child(2){width:200px}
/*IE*/
td:first-child+td{width:200px}
/*IE不支持--可以靠总宽度来调节
td:last-child{width:340px}*/
td span{color:red}
.vali_Info{/* 页面初始,验证消息不显示 */
display:none;
}
.txt_focus{/*当文本框获得焦点时穿上*/
border-top:2px solid black;
border-left:2px solid black;
}/*当文本框失去焦点时脱下*/
.vali_success,.vali_fail{
background-repeat:no-repeat;
background-position:left center;
display:block;
}
/* 验证消息:验证通过时的样式 */
.vali_success{
background-image:url("../images/ok.png");
padding-left:20px;
width:0px;height:20px;
overflow:hidden;
}
/* 验证消息:验证失败时的样式 */
.vali_fail{
background-image:url("../images/warning.png");
border:1px solid red;
background-color:#ddd;
color:Red;
padding-left:30px;
}
</span>
效果: