1. 程式人生 > >html form表單驗證和使用者體驗程式碼

html form表單驗證和使用者體驗程式碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>改善使用者體驗的表單</title>
    <style>
        #pwdLvSpan{display: inline-block;
                    width:100px;
                    height: 5px;
                    background: #c3c3c3
; }
#pwdLvSpan i{ display: block; background: green; height:5px; width:0; }
</style> </head> <body> <form method="post" action="/test/" onsubmit="return eg.regCheck();"> <input type="hidden"
name="" id="errnum" value="0"/>
賬戶:<input type="text" name="" id="userid" /><br/><br/> 密碼:<input type="password" name="" id="userpwd" /> 密碼強度<span id="pwdLvSpan"><i id="pwdLv"></i></span><br/><br/> 確認: <input type
="password" name="" id="userpwd2" />
<br/><br/> 性別:<input type="radio" name="sex" value="1" checked="checked"/><input type="radio" name="sex" value="0" /><br/><br/> 年齡:<select name="" id="age"> <option value="0" selected="selected">請選擇年齡段</option> <option value="1">18歲以下</option> <option value="2">18-24歲</option> <option value="3">24-30歲</option> <option value="4">30-35歲</option> <option value="5">35歲以上</option> </select><br/><br/> 愛好:<input type="checkbox" name="like" value="1" class="like" /> 上網<input type="checkbox" name="like" value="2" class="like"> 逛街<input type="checkbox" name="like" value="3" class="like"> 看電影<input type="checkbox" name="like" value="4" class="like">其他<br/><br/> 簡介:<textarea name="" rows="4" cols="18" id="about"></textarea><br/><br/> 郵箱: <input type="text" name="" id="email" /> <br/><br/> <input type="submit" value="註冊" id="regBtn"> <input type="button" value="解鎖" onclick="eg.unlock();" style="display: none;" id="regUnlock" /> </form> </body> <script> // 表單驗證 var eg = {}; // 申明一個物件當作名稱空間使用 // 定義一個公共函式獲取id元素 減少程式碼量 提高複用率 eg.$ = function (id) { return document.getElementById(id); }; // 定義一個公共函式來獲取制定class的名稱元素集合,能相容各瀏覽器 eg.getElementsByClassName = function (className, element) { if (document.getElementsByClassName){ return (element || document).getElementsByClassName(className) } var children = (element || document).getElementsByTagName('*'); var elements = []; for (var i =0; i <children.length; i++){ var child = children[i]; var classNames = child.className.split(' '); for (var j=0; j < classNames.length; j++){ if (classNames[j] == className){ elements.push(child); break; } } } return elements; }; // 定義一個公共函式解決監聽事件相容問題 eg.addListener = function (target, type, handler) { if (target.addEventListener){ target.addEventListener(type, handler, false); }else if (target.attachEvent) { target.attachEvent("on" + type, handler); }else{ target["on" + type] = handler; } }; // 主要驗證方法 eg.regCheck = function () { var uid = eg.$("userid"); var upwd = eg.$("userid"); var upwd2 = eg.$("userpwd2"); if (uid.value == ''){ alert("賬戶不能為空"); uid.focus(); eg.err(); return false; } if (upwd.value == ''){ alert("密碼不能為空"); upwd.focus(); eg.err(); return false; } if (upwd2.value == ''){ alert("兩次密碼輸入不同"); upwd2.focus(); eg.err(); return false; } // 簡介長度 var about = eg.$("about"); if (about.value.length>60){ alert("簡介太長!"); about.focus(); eg.err(); return false; } // 選擇年齡段 var age =eg.$("age"); if(age.value == "0"){ alert("請選擇年齡段!"); age.focus(); //讓輸入框獲得焦點 eg.err(); return false; } var likes = eg.getElementsByClassName("like"); var likeNum = 0; for (var n=0;n<likes.length;n++){ console.log(likes[n].checked); if (likes[n].checked){ likeNum++; } } if(likeNum==0){ alert("請至少選擇一個愛好!"); eg.err(); return false } // 郵箱驗證 var email = eg.$("email"); if(!/^[A-Za-z\d]+[A-Za-z\d\-_\.]*@([A-Za-z\d]+[A-Za-z\d]\-]*\.)+[A-Za-z]{2,4}$/.test(email.value)){ alert("請輸入正確的郵箱!"); email.focus(); eg.err(); return false; } return true; }; //新增一些互動事件 eg.addEvent = function () { var pwd = eg.$("userpwd"); eg.addListener(pwd, "keyup", function () { var lv = 0; if (/^\d{4,}$/.test(pwd.value)) { lv = 10; } else if (/^\w{4,}$/.test(pwd.value)) { lv = 25; } else if (/^\d\w{4,}$/.test(pwd.value)) { lv = 50; } else if (/^[\d\[email protected]#$%\^&*\(\)\-{}\[\]=<>,\.\?\/]{4,}$/.test(pwd.value)) { lv = 100; } else if (pwd.value.length < 6 && pwd.value.length > 3) { lv = 60; } eg.$("pwdLv").style.width = lv + "px"; }); }; eg.addEvent(); // 出錯時記錄錯誤次數 eg.err = function () { var el = eg.$("errnum"); var old = el.value; el.value = parseInt(old)+1; eg.lock(); }; eg.lock = function () { var err = eg.$("errnum"); if (parseInt(err.value) >2 ){ eg.$("regBtn").disabled =true; eg.$("regUnlock").style.display="block"; } }; // 解鎖 eg.unlock = function () { eg.$("regBtn").disabled = false; eg.$("regUnlock").style.display = "none"; } </script> </html>