用純javascript和html編寫仿淘寶注冊頁面(帶源碼)


本地javascript(純天然代碼)驗證,本地驗證主要分2部分:

一、和用戶的表單交互

 

  首先需要編寫用於表單交互的函數,該函數需要在頁面加載時加載,格式如下:window.onload=function (){}

 接着用getElement的方法獲取相應的標簽在function函數里定義為全局變量。

然后在function內編寫這些變量的事件,用到的三大事件分別為:onfocus(獲取焦點事件)、onkeyup(鍵盤事件)、onblur(失去焦點事件)。

用法:以onfocus為例如下:

 pwd.onfocus=function(){//變量pwd的獲取焦點事件

   pwd_msg.style.display="block";

   pwd_msg.innerHTML='<i class="ati"></i>6-16個字符,請使用字母加數字或符號的組合密碼,不能單獨使用字母、數字或符號。    ';

}

二、點擊提交按鈕是對表單的檢驗

主要用到onsumit(表單提交前)事件,用法如下:

<form method="post"  action="aupload.php" enctype="multipart/form-data"  onsubmit="return check()">

需要在function外單獨再編寫check函數。

三、完整源代碼及運行截圖獻上

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title> 驗證碼</title>
    <style type="text/css">
      #header{ width:95%; height:100px; padding-left:5%; clear:both; border-bottom:#CCC dashed thin ;}
      #header img{width:80px; height:80px; float:left; border-radius:40px; margin-top:10px ;margin-bottom:10px; }
      #header h1{display:inline-block; margin-left:20px;}
      #main{ width:100%; height:auto;}
      body,div,dl,dd,ul,ol,li{ margin:0;padding:0; font:12px/1.5"宋體","Arial",color:#666;}
      body{background:url(uploads/0911454230045.png) no-repeat; background-size:700px,450px; background-position:50px 120px;}
      img{ border:none}
      input,select,img{ vertical-align:middle}/*有疑惑*/
      lable{vertical-align:middle}
      form{ width:450px; height:500px; margin-top:130px; margin-right:80px;float:right; }
      form div{ overflow:hidden; clear:both}
      form div label{float:left; clear:both;}
      form div label .text{ width:152px; height:26px; padding:0 2px; border:1px solid #ccc }
      form div label b{ font-weight:normal; font-size:12px; color:#ccc; visibility:hidden}/*有疑惑*/
      form div em{ display:inline-block; font-family:12px; text-align:center;color:#fff; vertical-align:middle; font-style:normal; width:53px;height:15px; line-height:15px; background-color:#ffd099}
      form div .active{ background-color:#ff6600}
      div span{ display:inline-block; width:80px; text-align:right}
      .submitBtn{width:135px; height:33px; background:url(); color:red; margin:20px 0 0 80px;}/*需完善*/
      .changeimg{ width:22px; height:22px; display:inline-block; vertical-align:middle;background:url(uploads/img1.png) no-repeat 5px 1px}/*需完善*/
      .msg{ line-height:14px; color:#999; float:left; margin-left:5px;margin-top:2px; display:none; }
      .msg i{ display:inline-block; vertical-align:middle; width:25px; height:20px; background:url(uploads/img1_1.png) no-repeat}
      /*.msg .ati{ background:0 -71px}
      .msg .err{background:0 -39px}
      .msg .ok{background:0 -99px}
      */
    </style>
    <script type="text/javascript">
    function getLength(str){
      return str.replace(/[^\x00-xff]/g,"xx").length;//使用替換函數將正則值替換為xx
    }
    function findStr(str,n){//檢測是否密碼為連續的相同字符
        var tmp=0;
        for(var i=0;i<str.length;i++){
            if(str.charAt(i)==n){
                tmp++;
              }
        }
        return tmp;
    }
    
var code = ""; //驗證碼
//生成驗證碼
function createCode(){
    code = "";//重新初始化驗證碼
    var num = 4; //驗證碼位數
    var codeList = new Array(1,2,3,4,5,6,7,8,9,0,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); //驗證碼內容
    //循環獲取每一位驗證碼
        for(var i = 0; i < num; i++){
            //隨機數 * 驗證碼候選元素數量 = 候選元素數組下標
            code += codeList[Math.floor(Math.random() * codeList.length)];
        }
        document.getElementById("txtCode").value = code;
}
     
 window.onload=function (){
            createCode(); //加載驗證碼
           var alnput=document.getElementsByTagName('input');
           var oName=alnput[0];
           var pwd=alnput[1];
           var pwd2=alnput[2];
           var ma1=alnput[3];
           var ma2=alnput[4];
           var aP=document.getElementsByTagName('p');//ap中的P為大寫
           var name_msg=aP[0];
           var pwd_msg=aP[1];
           var pwd2_msg=aP[2];
           var ma=aP[3];
           var count=document.getElementById('count');
           var aEm=document.getElementsByTagName('em');
           var name_length=0;
           //1.數字、字母(不分大小寫)、漢字、下划線
           //2. 5-25字符,推薦使用中文
           //\u4e00-\u9fa5(這是漢字的范圍)
           var re=/[^\w\u4e00-\u9fa5]/g;
           var re_n=/[^\d]/g;
           var re_t=/[^a-zA-Z]/g;
           
           //用戶名
           oName.onfocus=function(){
               name_msg.style.display="block";
               name_msg.innerHTML='<i class="ati"></i>5-25個字符';
           }//獲取焦點事件
           oName.onkeyup=function(){
               count.style.visibility="visible";//有疑惑
               name_length=getLength(this.value);
               count.innerHTML=name_length+"個字符";
               if(name_length==0){
                   count.style.visibility="hidden"; 
               }
           }//鍵盤事件
           oName.onblur=function(){
               //含有非法字符
                 var re=/[^\w\u4e00-\u9fa5]/g;
                 if(re.test(this.value)){
                     name_msg.innerHTML='<i class="err"></i>含有非法字符';
                 }
               //不能為空
               else if(this.value==""){
                     name_msg.innerHTML='<i class="err"></i>不能為空';
               }
               //長度超過25個字符
               else if(name_length>25){
                     name_msg.innerHTML='<i class="err"></i>長度超過25個字符';
               }
               //長度少於6個字符
               else if(name_length<6){
                     name_msg.innerHTML='<i class="err"></i>長度少於6個字符';
               }
               //ok
               else{
                   name_msg.innerHTML='<i class="ok"></i>ok';
                   }
           }//失去焦點事件
           //密碼
           pwd.onfocus=function(){
               pwd_msg.style.display="block";
               pwd_msg.innerHTML='<i class="ati"></i>6-16個字符,請使用字母加數字或符號的組合密碼,不能單獨使用字母、數字或符號。';
           }
           pwd.onkeyup=function(){
               //大於5字符"中"
               if(this.value.length>5){
                   aEm[1].className="active";
                   pwd2.removeAttribute("disabled");//移除禁用屬性
                   pwd2_msg.style.display="block";
               }
               else{
                  aEm[1].className="";
                  pwd2_msg.style.display="none";
                  pwd2.disabled="true";//重新設置為禁用狀態
                 
               }
               //大於10個字符"強"
                if(this.value.length>10){
                   aEm[2].className="active";
                   
                   pwd2_msg.style.display="block";
               }
               else{
                  aEm[2].className="";
               }
               
           }
           pwd.onblur=function(){
               var m=findStr(pwd.value,pwd.value[0]);
               //不能為空
               if(this.value==""){
                   pwd_msg.innerHTML='<i class="err"></i>不能為空';
               }
               //不能用相同字符
               else if(m==this.value.length){
                   pwd_msg.innerHTML='<i class="err"></i>不能使用相同字符';
               }
               //長度應為6-16個字符
               else if(this.value.length<6||this.value.length>16){
                   pwd_msg.innerHTML='<i class="err"></i>長度應為6-16個字符';
               }
               //不能全為數字
               else if(!re_n.test(this.value)){
                    pwd_msg.innerHTML='<i class="err"></i>不能全為數字';
               }
               //不能全為字母
                 else if(!re_t.test(this.value)){
                    pwd_msg.innerHTML='<i class="err"></i>不能全為字母';
               }
                //ok
               else{
                   pwd_msg.innerHTML='<i class="err"></i>ok';
                   
               }
              
           }
           //確認密碼
          
           pwd2.onblur=function(){
               if(this.value!=pwd.value){
                   pwd2_msg.innerHTML='<i class="err"></i>兩次輸入密碼不一致!';   
               }
               else{
                    pwd2_msg.innerHTML='<i class="err"></i>ok!'; 
               }
           }
           //驗證碼
            ma1.onblur=function(){
                if(ma1.value==code){    
            ma.style.display="block";
               ma.innerHTML='<i class="ati"></i>ok';
                }
    else{
        ma.style.display="block";
        ma.innerHTML='<i class="ati"></i>驗證碼輸入有誤';
        code = "";
    createCode(); //生成新的驗證碼
        }
            }
                 
 }
 //下面為check函數進行提交前的驗證
   function check(){
       
       var alnput=document.getElementsByTagName('input');
           var oName=alnput[0];
           var pwd=alnput[1];
           var pwd2=alnput[2];
           var ma1=alnput[3];
           var ma2=alnput[4];
           var subt=alnput[5];
           var aP=document.getElementsByTagName('p');//ap中的P為大寫
           var name_msg=aP[0];
           var pwd_msg=aP[1];
           var pwd2_msg=aP[2];
           var count=document.getElementById('count');
           var aEm=document.getElementsByTagName('em');
           var name_length=0;
           //1.數字、字母(不分大小寫)、漢字、下划線
           //2. 5-25字符,推薦使用中文
           //\u4e00-\u9fa5(這是漢字的范圍)
           var re=/[^\w\u4e00-\u9fa5]/g;
           var re_n=/[^\d]/g;
           var re_t=/[^a-zA-Z]/g;
           var k=1;
           var re=/[^\w\u4e00-\u9fa5]/g;
           //用戶名
           name_length=getLength(oName.value);
            if (oName.value==""){
               
               name_msg.style.display="block";
               name_msg.innerHTML='<i class="ati"></i>請輸入用戶名';
               k=k+1;
            }
            else if(re.test(oName.value)){
                 name_msg.innerHTML='<i class="err"></i>含有非法字符';
                 k=k+1;
            }
            //長度超過25個字符
               else if(name_length>25){
                     //name_msg.innerHTML='<i class="err"></i>長度超過25個字符';
                     k=k+1;
               }
               //長度少於6個字符
               else if(name_length<6){
                    // name_msg.innerHTML='<i class="err"></i>長度少於6個字符';
                      k=k+1;
               }
            else{
                k=k+0;
            }
           
            //密碼
            var m=findStr(pwd.value,pwd.value[0]);
               //不能為空
               if(pwd.value==""){
               pwd_msg.style.display="block";
              // pwd_msg.innerHTML='<i class="ati"></i>不能為空';
               k=k+1;
               }
               //不能用相同字符
               else if(m==pwd.value.length){
                   k=k+1;
               }
               //長度應為6-16個字符
               else if(pwd.value.length<6||pwd.value.length>16){
                   k=k+1;
               }
               //不能全為數字
               else if(!re_n.test(pwd.value)){
                    k=k+1;
               }
               //不能全為字母
                 else if(!re_t.test(pwd.value)){
                    k=k+1;
               }
                //ok
               else{
                   k=k+0;
                   
               }
             //確認密碼
              if(pwd2.value!=pwd.value){
                   pwd2_msg.innerHTML='<i class="err"></i>兩次輸入密碼不一致!';  
                   k=k+1; 
               } 
               else{
                   k=k+0;
               }
             //檢驗驗證碼輸入是否有誤
             if(ma1.value!=ma2.value){
                 k=k+1;
             }
             else{
                 k=k+0;
             }
            //下面的操作計算check函數的返回值
            if(k!=1){
                return false;
            }
            else{
                  aEm[1].className="";
                  subt.value='正在提交';
                  subt.disabled='true';
                return true; 
            }
           
 }
    </script>
   
</head>
<body>
    <div id="header">
       <img src="uploads/a1.jpg" /><h1>web學園</h1> 
    </div>
    <div id="main">
    <form method="post"  action="aupload.php" enctype="multipart/form-data"  onsubmit="return check()">
     <div>
      <label> <span>會員名:</span><input type="text" class="text"/></label>
      <p class="msg"><i class="ati"></i>5-25個字符,一個漢字為2個字符,推薦使用中文會員名</p>
     </div>
     <div>
      <label> <span></span><b id="count">0個字符</b></label>
     </div>
     <div>
      <label><span>登錄密碼:</span><input type="password" class="text"/></label>
      <p class="msg" style="width:200px; height:50px;"><i class="err"></i>5-25個字符,一個漢字為2個字符,推薦使用中文會員名</p>
     </div>
     <div style="margin:3px 0 10px 0">
      <label><span></span><em class="active"></em><em></em><em></em></label>
     </div>
     <div style="margin-bottom:20px;">
      <label><span>確認密碼:</span><input type="password" class="text" disabled=""/></label>
      <p class="msg"><i class="ati"></i>請在輸入一次</p>
     </div>
     <div>
      <label><span>驗證碼:</span><input type="text" style="width:50px;"/><input id="txtCode" type="text" style=" width:60px;" readonly  /><a href="#" class="changeimg" title="重新獲取驗證碼" onClick="createCode()"></a></label> <p class="msg"><i class="ati"></i>驗證碼輸入有誤</p>
     </div>
     <div>
      <input class="submitBtn"   type="submit" value="同意協議並注冊" onclick=""/>
     </div>
    </form>
   </div>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM