Javascript_06_表單驗證(離開單項,輸入框後提示資訊)
阿新 • • 發佈:2019-02-15
Javascript_06_ 表單驗證(離開單項,輸入框後提示資訊)
說明:對於必須輸入的入力框,游標離開(使用 onblur方法)時進行檢查。假如有錯,紅色的提示資訊直接在該畫面的這個輸入框的後面顯示出來,並把游標重新定向到這個輸入框。
待解決問題:
① 記憶體洩漏問題:比如使用者名稱沒輸入,離開使用者名稱輸入框時,畫面上會給出提示警告資訊;此時再點選密碼輸入框時,會導致 IE佔用很大的記憶體,好像是記憶體洩漏了。
② 對於選擇框的檢查問題(上述方法是在從輸入框離開時進行檢查),對於選擇框,我直接沒有點選選擇,又怎麼檢查呢?此問題擴充套件開來,假如使用者直接沒有將游標放入過必須輸入項,那這一項的檢查也就無從談起了。極端些,假如使用者什麼也沒有輸入,就直接點選提交,這種檢查機制就不會起作用。前面那個彈警告框的驗證方式,雖然使用者體驗不太好,但是肯定能起作用。
這邊只是先將這種使用者體驗比較好的檢查機制的原理用程式碼表現一下,以下的這兩個檔案還需要改善。但這種使用者體驗比較好的檢查機制是以後的發展方向,也是我們要努力的方向。
1. regcheckdata2.js
[javascript] view plaincopy- function checkdata() {
- var ssn=form.username.value.toLowerCase();
- if (!checkUserName(ssn)) return false; //使用者名稱檢查
- var pwd1 = form.pwd.value;
- if (!checkPassword1(pwd1)) return false; //密碼1檢查
- var pwd2 = form.pwd2.value;
- if (!checkPassword1(pwd2)) return false; //確認密碼檢查
- //檢查性別
- if( !(form.sex[0].checked || form.sex[1].checked) ) {
- alert("請選擇性別!");
- form.sex[0].focus();
- return
- }
- //檢查省份
- if( form.province.selectedIndex == 0 ) {
- alert("請選擇省份!");
- form.province.focus();
- return false;
- }
- if(form.intro.value == "") {
- alert("/自我介紹不能為空!");
- form.intro.focus();
- return false;
- }
- return true;
- }
- // 使用者名稱檢查
- function checkUserName(ssn){
- if( ssn.length<3 || ssn.length>18 ) {
- document.getElementById("usernameErr").innerHTML = "<font color='red'>
- 請輸入正確的使用者名稱,使用者名稱長度為3-18位!</font>";
- form.username.focus()
- return false;
- }
- if (isWhiteWpace(ssn)){
- document.getElementById("usernameErr").innerHTML = "<font color='red'>請輸入正確的使用者名稱,使用者名稱中不能包含空格!</font>";
- form.username.focus()
- return false;
- }
- if (!isSsnString(ssn)){
- document.getElementById("usernameErr").innerHTML = "<font color='red'>對不起,您選擇的使用者名稱不正確或已被佔用!使用者名稱/n由a~z的英文字母(不區分大小寫)、0~9的數字、點、減/n號或下劃線組成,長度為3~18個字元,只能以數字或字母/n開頭和結尾,例如:kyzy_001。</font>";
- form.username.focus()
- return false;
- }
- //輸入正確的使用者名稱後,將上次的錯誤提示資訊清掉
- document.getElementById("usernameErr").innerHTML = "";
- return true;
- }
- //密碼檢查
- function checkPassword1(pwd1) {
- if( strlen(pwd1)<6 || strlen(pwd1)>16 ) {
- //alert("/正確地登入密碼長度為6-16位,僅可用英文、數字、特殊字元!")
- document.getElementById("pwdErr").innerHTML = "<font color='red'>正確地登入密碼長度為6-16位,僅可用英文、數字、特殊字元!</font>";
- form.pwd.focus()
- return false;
- }
- if( strlen2(pwd1) ) {
- //alert("/您的密碼中包含了非法字元,僅可用英文、數字、特殊字元!")
- document.getElementById("pwdErr").innerHTML = "<font color='red'>您的密碼中包含了非法字元,僅可用英文、數字、特殊字元!</font>";
- form.pwd.focus()
- return false;
- }
- if( pwd1 == form.username.value ) {
- //alert("/使用者名稱和密碼不能相同!")
- document.getElementById("pwdErr").innerHTML = "<font color='red'>密碼和使用者名稱不能相同!</font>";
- form.pwd.focus()
- return false;
- }
- document.getElementById("pwdErr").innerHTML = "";
- return true;
- }
- //確認密碼檢查
- function checkPassword2(pwd2) {
- if( pwd2 =="" ) {
- //alert("/請輸入密碼確認!")
- document.getElementById("pwd2Err").innerHTML = "<font color='red'>請輸入密碼確認!</font>";
- form.pwd2.focus()
- return false;
- }
- if( pwd2 != form.pwd.value ) {
- //alert("/兩次密碼輸入不一致!")
- document.getElementById("pwd2Err").innerHTML = "<font color='red'>兩次密碼輸入不一致!</font>";
- form.pwd2.focus()
- return false;
- }
- document.getElementById("pwd2Err").innerHTML = "";
- return true;
- }
- function strlen(str){
- var len;
- var i;
- len = 0;
- for (i=0;i<str.length;i++){
- if (str.charCodeAt(i)>255) len+=2; else len++;
- }
- return len;
- }
- function strlen2(str){
- var len;
- var i;
- len = 0;
- for (i=0;i<str.length;i++){
- if (str.charCodeAt(i)>255) return true;
- }
- return false;
- }
- function isWhiteWpace (s)
- {
- var whitespace = " /t/n/r";
- var i;
- for (i = 0; i < s.length; i++){
- var c = s.charAt(i);
- if (whitespace.indexOf(c) >= 0) {
- return true;
- }
- }
- return false;
- }
- function isSsnString (ssn)
- {
- var re=/^[0-9a-z][/w-.]*[0-9a-z]$/i;
- if(re.test(ssn))
- return true;
- else
- return false;
- }
- function checkssn(gotoURL) {
- var ssn=form.username.value.toLowerCase();
- if (checkUserName(ssn)){
- var open_url = gotoURL + "?username=" + ssn;
- window.open(open_url,'','status=0,directories=0,resizable=0,toolbar=0,location=0,scrollbars=0,width=322,height=200');
- }
- }
2. userReg2.html
[javascript] view plaincopy- <html>
- <head>
- <title>表單</title>
- <mce:script language=JavaScript src="script/regcheckdata.js" mce_src="script/regcheckdata.js"></mce:script>
- <mce:script type="text/javascript"><!--
- // --></mce:script>
- </head>
- <body>
- <form name="form" action="01.html" method="get" onSubmit="return checkdata()">
- <table width="750" align="center" border="2">
- <tr>
- <td colspan="2" align="center">使用者註冊</td>
- </tr>
- <tr>
- <td>使用者名稱:</td>
- <td>
- <input type=text name="username" size="30" maxlength="10" onblur="checkUserName(this.value.toLowerCase())">
- <span id="usernameErr"></span>//同一行(首選)
- <!--<div id="usernameErr"></div>-->//另起一行
- </td>
- </tr>
- <tr>
- <td>密碼:</td>
- <td>
- <input type=password name="pwd" size="15" maxlength="12" onblur="checkPassword1(this.value)">
- <span id="pwdErr"></span>
- </td>
- </tr>
- <tr>
- <td>密碼確認</td>
- <td>
- <input type=password name="pwd2" size="15" maxlength="12" onblur="checkPassword2(this.value)">
- <span id="pwd2Err"></span>
- </td>
- </tr>
- <tr>
- <td>性別</td>
- <td>
- <input type=radio name="sex" value="male">男
- <input type=radio name="sex" value="female">女
- </td>
- </tr>
- <tr>
- <td>你感興趣</td>
- <td>
- <input type="checkbox" name="interest" value="vc" checked>VC
- <input type="checkbox" name="interest" value="vb">VB
- <input type="checkbox" name="interest" value="vfoxpro">VF
- <input type="checkbox" name="interest" value="vjava">VJ
- <br>
- <input type="checkbox" name="interest" value="bc">BC
- <input type="checkbox" name="interest" value="cobol">CO
- <input type="checkbox" name="interest" value="java">JA
- <input type="checkbox" name="interest" value="delphi">Delphi
- </td>
- </tr>
- <!--必須選中JSP-->
- <input type="hidden" name="interest" value="jsp">
- <tr>
- <td>你感興趣</td>
- <td>
- <select name="interest2" size=8 multiple>
- <option value="vc" selected>VC</option>
- <option value="vb">VB</option>
- <option value="vfoxpro">VF</option>
- <option value="vjava">VJ</option>
- <option value="bc">BC</option>
- <option value="cobol">CO</option>
- <option value="java">JA</option>
- <option value="delphi">Delphi</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>你來自</td>
- <td>
- <select name="province">
- <option value=0 selected>請選擇</option>
- <option value=34>安徽</option>
- <option value=11>北京</option>
- <option value=50>重慶</option>
- <option value=35>福建</option>
- <option value=62>甘肅</option>
- <option value=44>廣東</option>
- <option value=45>廣西</option>
- <option value=52>貴州</option>
- <option value=46>海南</option>
- <option value=13>河北</option>
- <option value=23>黑龍江</option>
- <option value=41>河南</option>
- <option value=42>湖北</option>
- <option value=43>湖南</option>
- <option value=32>江蘇</option>
- <option value=36>江西</option>
- <option value=22>吉林</option>
- <option value=21>遼寧</option>
- <option value=64>寧夏</option>
- <option value=15>內蒙古</option>
- <option value=63>青海</option>
- <option value=31>上海</option>
- <option value=14>山西</option>
- <option value=37>山東</option>
- <option value=51>四川</option>
- <option value=61>陝西</option>
- <option value=12>天津</option>
- <option value=54>西藏</option>
- <option value=65>新疆</option>
- <option value=53>雲南</option>
- <option value=33>浙江</option>
- <option value=71>臺灣</option>
- <option value=81>香港</option>
- <option value=82>澳門</option>
- <option value=0>其他</option>
- </select>
- </td>
- </tr>
- <tr>
- <td>自我介紹</td>
- <td>
- <textarea rows="12" cols="80" name="intro">