30、任务三十——获得/失去焦点、表单处理
0、题目
- 如示例图中所示,基于上一个任务(任务29),在页面中添加多个表单
- 要求:
- 表单获得焦点时,下方显示表单填写规则
- 表单失去焦点时校验表单内容
- 校验结果正确时,表单边框显示绿色,并在下方显示验证通过的描述文字
- 校验结果错误时,表单边框显示红色,并在下方显示验证错误的描述文字
- 点击提交按钮时,对页面中所有输入进行校验,校验结果显示方式同上。若所有表单校验通过,弹窗显示“提交成功”,否则显示“提交失败”
1、解题过程
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>IFE JavaScript Task 30</title> 6 <style> 7 form{ 8 margin:auto; 9 width:860px; 10 font-size: 24px; 11 } 12 label{ 13 display: inline-block; 14 width:100px; 15 text-align: right; 16 } 17 input{ 18 width:700px; 19 height:40px; 20 margin:20px; 21 border-radius: 7px; 22 border:2px solid #ccc; 23 } 24 input:focus{ 25 outline: none; 26 border:2px solid #7dace9; 27 border-radius: 7px; 28 box-shadow: 0 2px 2px 2px #e1edfa; 29 } 30 .right{ 31 outline: none; 32 border:2px solid #81b950; 33 border-radius: 7px; 34 } 35 .wrong{ 36 outline: none; 37 border:2px solid #bd0315; 38 border-radius: 7px; 39 } 40 div{ 41 margin-left:130px; 42 font-size: 20px; 43 } 44 button{ 45 float:right; 46 border:1px solid #4e79b7; 47 background-color:#4e79b7; 48 width:120px; 49 height:50px; 50 margin-right:25px; 51 font-size: 24px; 52 color:white; 53 border-radius: 7px; 54 } 55 button:focus{ 56 outline: none; 57 border:1px solid #27569c; 58 background-color:#27569c; 59 } 60 </style> 61 </head> 62 <body> 63 <form id="form"> 64 <label for="name" id="nameLabel">名称</label> 65 <input id="name" type="text"/><br/> 66 <div id="result-name"></div> 67 68 <label for="pw1" id="pw1Label">密码</label> 69 <input id="pw1" type="password"/><br/> 70 <div id="result-pw1"></div> 71 72 <label for="pw2" id="pw2Label">确认密码</label> 73 <input id="pw2" type="password"/><br/> 74 <div id="result-pw2"></div> 75 76 <label for="email" id="emailLabel">邮箱</label> 77 <input id="email" type="text"/><br/> 78 <div id="result-email"></div> 79 80 <label for="phone" id="phoneLabel">手机</label> 81 <input id="phone" type="text"/><br/> 82 <div id="result-phone"></div> 83 84 <button id="submit">提交</button> 85 </form> 86 87 88 <script type="text/javascript" > 89 function $(id){ 90 return document.getElementById(id); 91 } 92 $("form").addEventListener("click",function(e){ 93 var id=e.target.id; 94 switch(id){ 95 case "nameLabel":case "name":{ 96 $("result-name").innerHTML="必填,长度为4~16字符"; 97 $("result-name").style.color="#a6a6a6"; 98 $("name").onblur=function(){testName($('name').value);} 99 break; 100 } 101 case "pw1Label":case "pw1":{ 102 $("result-pw1").innerHTML="必填,长度为8~16字符,只能为数字、大小写字母"; 103 $("result-pw1").style.color="#a6a6a6"; 104 $("pw1").onblur=function(){testPw1($('pw1').value);} 105 break; 106 } 107 case "pw2Label":case "pw2":{ 108 $("result-pw2").innerHTML="再次输入相同密码"; 109 $("result-pw2").style.color="#a6a6a6"; 110 $("pw2").onblur=function(){testPw2($('pw1').value,$('pw2').value);} 111 break; 112 } 113 case "emailLabel":case "email":{ 114 $("result-email").innerHTML="请输入有效邮箱地址"; 115 $("result-email").style.color="#a6a6a6"; 116 $("email").onblur=function(){testEmail($('email').value);} 117 break; 118 } 119 case "phoneLabel":case "phone":{ 120 $("result-phone").innerHTML="请输入手机号"; 121 $("result-phone").style.color="#a6a6a6"; 122 $("phone").onblur=function(){testPhone($('phone').value);} 123 break; 124 } 125 } 126 }); 127 //点击提交按钮 128 $("submit").addEventListener("click",function(e){ 129 if(testName($('name').value)||testPw1($('pw1').value)|| 130 testPw2($('pw2').value)||testEmail($('email').value)|| 131 testPhone($('phone').value)){ 132 alert("提交成功!"); 133 } 134 else alert("输入有误!"); 135 e.preventDefault(); 136 return false; 137 }); 138 //名称验证 139 function testName(name){ 140 var length=checkLength(name); 141 if((/^[a-zA-Z0-9\u4e00-\u9fa5]+$/.test(name))&&length>=4&&length<=16){ 142 $("result-name").innerHTML="验证成功!"; 143 $("result-name").style.color="#81b950"; 144 $("name").className="right"; 145 } 146 else{ 147 $("result-name").innerHTML="名称错误!"; 148 $("result-name").style.color=" #bd0315"; 149 $("name").className="wrong"; 150 return false; 151 } 152 } 153 //检验名称有多少个字符 154 function checkLength(str){ 155 var len =0,temp=0; 156 for(var j=0;j<str.length;j++){ 157 temp = 1; 158 if(/^[\u2E80-\u9FFF]+$/.test(str[j])){ 159 temp = 2; 160 } 161 len += temp; 162 } 163 return len; 164 } 165 //密码1验证 166 function testPw1(pw1){ 167 if(/^[A-Za-z0-9]{8,16}$/.test(pw1)){ 168 $("result-pw1").innerHTML="密码可用"; 169 $("result-pw1").style.color="#81b950"; 170 $("pw1").className="right"; 171 } 172 else{ 173 $("result-pw1").innerHTML="密码不可用"; 174 $("result-pw1").style.color=" #bd0315"; 175 $("pw1").className="wrong"; 176 return false; 177 } 178 } 179 //密码2验证 180 function testPw2(pw1,pw2){ 181 if(pw2==pw1&&testPw1(pw1)){ 182 $("result-pw2").innerHTML="密码输入一致"; 183 $("result-pw2").style.color="#81b950"; 184 $("pw2").className="right"; 185 } 186 else{ 187 $("result-pw2").innerHTML="密码输入不一致"; 188 $("result-pw2").style.color=" #bd0315"; 189 $("pw2").className="wrong"; 190 return false; 191 } 192 } 193 //邮箱验证 194 function testEmail(email){ 195 if( /\w+([-+.´]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(email)){ 196 $("result-email").innerHTML="邮箱格式正确"; 197 $("result-email").style.color="#81b950"; 198 $("email").className="right"; 199 } 200 else{ 201 $("result-email").innerHTML="邮箱格式错误"; 202 $("result-email").style.color=" #bd0315"; 203 $("email").className="wrong"; 204 return false; 205 } 206 } 207 //手机号验证 208 function testPhone(phone){ 209 if(/^1[34578]\d{9}$/.test(phone)){ 210 $("result-phone").innerHTML="手机格式正确"; 211 $("result-phone").style.color="#81b950"; 212 $("phone").className="right"; 213 } 214 else{ 215 $("result-phone").innerHTML="手机格式错误"; 216 $("result-phone").style.color=" #bd0315"; 217 $("phone").className="wrong"; 218 return false; 219 } 220 } 221 </script> 222 </body> 223 </html>
2、遇到的问题