1. 程式人生 > >AJAX應用之表單驗證

AJAX應用之表單驗證

一。表單常用事件

          有三個,onsubmit(表單提交)事件,onfocus(獲得焦點)事件,onblur(失去焦點)事件。

1. onsubmit事件作用:組織或者允許表單的提交。

<form action="" method="post" onsubmit="return false">

 renturn 值為false時,無法提交。表單驗證的實質:一開始設定為false,只有當所有驗證都通過之後,才把它的值改為true,這樣才能提交表單。程式碼如下:

<form action="" method="post" onsubmit="return checkForm()">


//checkForm虛擬碼形式
function checkForm(){
    if('所有驗證通過'){
        return true;
     }else{
        return false;
    }
}

2. onfocus事件(點選輸入框時觸發): 常用於使用者點選輸入框時清空輸入框的內容,並且改變輸入框的樣式,讓使用者清晰的看到當前正在哪一個輸入框中進行輸入。

3. onblur事件實在輸入框中的內容完成之後,滑鼠離開是這個輸入框時觸發的事件。常利用這個事件來進行一系列驗證,看使用者的輸入是否符合要求。

二。網頁表單驗證例項


<!DOCTYPE html>
<html lang='zh-CN'>
<head>
	<title>註冊驗證</title>
	<meta charset='utf-8'>
	<script src='myAjax.js'></script>
</head>
<body>
<form action='http://127.0.0.1:3000/reqRes' method='post' onsubmit='return checkForm()'>
	使用者名稱:<input type='text' name='username'><span></span><br><br>
	密&nbsp;&nbsp;碼:<input type='password' name='pass'><span></span><br><br>
	確認密碼:<input type='password' name='repass'><span></span><br><br>
	郵&nbsp;&nbsp;箱:<input type='text' name='email' ><span></span><br><br>
	手&nbsp;&nbsp;機:<input type='text' name='phone' ><span></span><br><br>
	&nbsp;&nbsp;<input type='submit' value='提交' name=''>
	<input type='reset' value='重寫' name=''>
</form>
</body>
<script>
//定義標誌,所有標誌為1才能提交註冊
var flag_user = flag_pass = flag_repass = flag_email = flag_phone = 0;
//獲取所有input節點
var inputs = document.getElementsByTagName('input');
console.log(inputs);
//獲取所有的span標籤,用於給出提示資訊
var spans = document.getElementsByTagName('span');
//遍歷input節點,給不同的input的繫結不同的事件
for(var i = 0; i < inputs.length; i++){
	if(inputs[i].name == 'username'){ 	// 匹配到使用者名稱,進行驗證
		var index_u = i;				//儲存i的值,作為下標
		//繫結獲得焦點事件,獲得焦點清空輸入框
		inputs[index_u].onfocus = function(){
			//獲取焦點事件提示使用者輸入正確格式
			spans[index_u].innerHTML = '使用者名稱為6-16為英文、數字和下劃線組成';
			this.value = '';			//	清空輸入框
		}
		//繫結失去焦點事件,失去焦點進行驗證
		inputs[index_u].onblur = function(){
			//失去焦點先進行使用者名稱的格式驗證,
			//符合要求才傳送Ajax到伺服器驗證是否存在
			var reg = /^[a-zA-Z\d_]\w{6,16}$/;//正則表示式
			if(reg.test(this.value)){
				//驗證成功,Ajax遠端請求伺服器進行使用者名稱驗證
				Ajax('json',false).post('http://127.0.0.1:3000/checkReg',{username:this.value},function(data){
					//判斷結果,執行不同的操作
					if(data.flag == 0){ //該使用者不存在於資料庫,可以註冊
						flag_user = 1;
						spans[index_u].innerHTML = data.message;
					}else{
						flag_user = 0;
						spans[index_u].innerHTML = data.message;
					}
				});
			}else{						//驗證失敗,提示使用者
				spans[index_u].innerHTML = '使用者名稱格式不正確'; //提示使用者
			}
		}
	} else if(inputs[i].name == 'pass'){//密碼只進行格式驗證
		var index_p = i;
		var reg_p = /^[a-zA-Z\d]{6,16}$/; 	//正則匹配
		//繫結獲得焦點事件,獲取焦點清空輸入框
		inputs[index_p].onfocus = function(){
			//獲得焦點事件提示使用者輸入正確格式
			spans[index_p].innerHTML = '密碼為6-16為英文、數字組成';
			//清空輸入框的值;
			this.value = '';
		};
		//失去焦點事件,失去焦點
		inputs[index_p].onblur = function(){
			if(reg_p.test(this.value)){
				flag_pass = 1;
				spans[index_p].innerHTML = '密碼格式正確';
			}else{
				flag_pass = 0;
				spans[index_p].innerHTML = '密碼格式不正確';
			}
		}
	} else if(inputs[i].name == 'repass'){
		var index_r = i;
		//繫結獲得焦點事件,獲取焦點清空輸入框
		inputs[index_r].onfocus = function(){
			//獲得焦點事件提示使用者輸入正確格式
			spans[index_r].innerHTML = '請輸入重複密碼進行比對';
			//清空輸入框的值;
			this.value = '';
		};
		//失去焦點事件,失去焦點
		inputs[index_r].onblur = function(){
			if(inputs[index_p].value == inputs[index_r].value){
				flag_repass = 1;
				spans[index_r].innerHTML = '重複密碼正確';
			}else{
				flag_repass = 0;
				spans[index_r].innerHTML = '密碼不一致';
			}
		}
	} else if(inputs[i].name == 'email'){
		var index_e = i;
		//正則驗證郵箱
		var reg_e = /^([a-zA-Z0-9_-])
[email protected]
([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/; //繫結獲得焦點事件,獲取焦點清空輸入框 inputs[index_e].onfocus = function(){ //獲得焦點事件提示使用者輸入正確格式 spans[index_e].innerHTML = '請輸入正確的郵箱格式'; //清空輸入框的值; this.value = ''; }; //失去焦點事件,失去焦點 inputs[index_e].onblur = function(){ if(reg_e.test(this.value)){ flag_email = 1; spans[index_e].innerHTML = '郵箱格式正確'; }else{ flag_email = 0; spans[index_e].innerHTML = '郵箱格式不正確'; } } } else if(inputs[i].name == 'phone'){ var index_ph = i; //正則驗證 var reg_ph = /^1[3|4|5|8]\d{9}$/; //繫結獲得焦點事件,獲取焦點清空輸入框 inputs[index_ph].onfocus = function(){ //獲得焦點事件提示使用者輸入正確格式 spans[index_ph].innerHTML = '請輸入正確的手機號'; //清空輸入框的值; this.value = ''; }; //失去焦點事件,失去焦點 inputs[index_ph].onblur = function(){ if(reg_ph.test(this.value)){ flag_phone = 1; spans[index_ph].innerHTML = '手機格式正確'; }else{ flag_phone = 0; spans[index_ph].innerHTML = '手機格式不正確'; } } } } //當所有的表單都驗證通過了之後才能提交發送 function checkForm(){ if(flag_user == 1 && flag_pass == 1 && flag_repass == 1 && flag_email == 1 && flag_phone == 1 ){ //所有驗證都通過返回true,允許表單提交 return true; }else{ //條件不通過返回false,阻止表單提交 return false; } } </script> </html>

下面是另外一個表單驗證的例項,使用了一丟丟的VUE的知識

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>js表單驗證</title>
    <style type="text/css">
        body,
        div,
        h2,
        p,
        input,
        span,
        label {
            margin: 0px;
            padding: 0px;
        }

        .head {
            width: 800px;
            height: 60px;
            margin: 50px auto;
            border: 1px #ccc solid;
            text-align: center;
        }

        h2 {
            line-height: 60px
        }

        .content {
            width: 900px;
            margin: 30px auto;
            border: 1px solid #ccc;
        }

        #sub_content {
            padding: 10px;
            width: 800px;
            margin: 1px auto;
        }

        #sub_content label {
            display: inline-block;
            width: 100px;
            height: 32px;
            line-height: 32px;
            color: #666;
            text-align: right;
        }

        #sub_content .userName {
            width: 200px;
            height: 25px;
            line-height: 25px;
            border: 1px solid #CCC;
        }

        .choose .default,
        #sub_content .default {
            width: 200px;
            height: 32px;
            line-height: 32px;
            color: #999;
            font-size: 13px;
        }

        .choose {
            padding: 10px;
            width: 800px;
            margin: 1px auto;
        }

        .choose label {
            display: inline-block;
            width: 100px;
            height: 32px;
            line-height: 32px;
            color: #666;
            text-align: right;
        }

        .choose .specil {
            display: inline-block;
            width: 50px;
            height: 32px;
            line-height: 32px;
            color: #666;
            text-align: left
        }

        #sub_content .error {
            height: 32px;
            line-height: 32px;
            color: #F00;
            font-size: 13px;
        }

        #sub_content .success {
            height: 32px;
            line-height: 32px;
            color: #096;
        }

        .divBtn {
            margin-top: 20px;
            margin-left: 200px;
            width: 100px;
            height: 32px;
            line-height: 32px;
            background-color: #F93;
            margin-bottom: 10px;
            color: #ffffff;
            font-weight: bold;
            border: none;
        }
    </style>
</head>

<body>
    <div>
        <div class="head">
            <h2>新使用者註冊</h1>
        </div>
        <div class="content">
            <form action="#" id="myform" method="POST">
                <div id="sub_content">
                    <label for="userName">使用者名稱:</label>
                    <input type="text" id="userName" name="BasicInformation" class="userName" onBlur="checkUserName()" oninput="checkUserName()" maxlength="20"
                        required>
                    <span class="default" id="nameErr">請輸入至少3位的使用者名稱</span>
                </div>
                <div id="sub_content">
                    <label for="userPasword">密碼:</label>
                    <input type="password" id="userPasword" name="BasicInformation" class="userName" onBlur="checkPassword()" oninput="checkPassword()" maxlength="11"
                        required>
                    <span class="default" id="passwordErr">請輸入6到11位的密碼</span>
                </div>
                <div id="sub_content">
                    <label for="userConfirmPasword">確認密碼:</label>
                    <input type="password" id="userConfirmPasword" class="userName" onBlur="ConfirmPassword()" oninput="ConfirmPassword()" required>
                    <span class="default" id="conPasswordErr">請再輸入一遍密碼</span>
                </div>
                <div id="sub_content">
                    <label for="userEmali">電子郵箱:</label>
                    <input type="text" id="userEmail" name="BasicInformation" class="userName" onBlur="checkEmail()" oninput="checkEmail()">
                    <span class="default" id="EmailErr">請輸入正確的郵箱號碼</span>
                </div>
                <div class="choose" id="specil">
                    <label for="userIden">您的身份:</label>
                    <input type="radio" id="student" class="userName" value="學生" name="identity" v-model="iden">
                    <label for="student" class="specil">學生</label>
                    <input type="radio" id="teacher" class="userName" value="老師" name="identity" v-model="iden">
                    <label for="teacher" class="specil">老師</label>
                    <input type="radio" id="parent" class="userName" value="家長" name="identity" v-model="iden">
                    <label for="parent" class="specil">家長</label>
                    <input type="radio" id="others" class="userName" value="其他" name="identity" v-model="iden">
                    <label for="others" class="specil">其他</label>
                    <span class="default">您選擇的是: {{iden}}</span>
                </div>
                <div class="choose" id="specil2">
                    <label for="userHobby">您的愛好:</label>
                    <input type="checkbox" id="bb" class="userName" value="籃球" name="hobby" v-model="hobby">
                    <label for="bb" class="specil">籃球</label>
                    <input type="checkbox" id="fb" class="userName" value="足球" name="hobby" v-model="hobby">
                    <label for="fb" class="specil">足球</label>
                    <input type="checkbox" id="pp" class="userName" value="攝影" name="hobby" v-model="hobby">
                    <label for="pp" class="specil">攝影</label>
                    <input type="checkbox" id="others2" class="userName" value="其他" name="hobby" v-model="hobby">
                    <label for="others2" class="specil">其他</label>
                    <span class="default">您的愛好有: {{hobby}}</span>
                </div>
                <div id="sub_content">
                    <label for="userPhone">手機號碼:</label>
                    <input type="text" id="userPhone" name="BasicInformation" class="userName" onBlur="checkPhone()" oninput="checkPhone()" required maxlength="11">
                    <span class="default" id="phoneErr">請輸入11位手機號碼</span>
                </div>
                <div>
                    <button type="submit" class="divBtn" id="btn">註冊</button>
                </div>
            </form>
        </div>
    </div>
    <div>
        <button id="btn2">show data</button>
        <div id="show">

        </div>
    </div>
    <script type="text/javascript">
        var iden = new Vue({
            el: '#specil',
            data: {
                iden: "學生",
            }
        })
        var hob = new Vue({
            el: '#specil2',
            data: {
                hobby: []
            }
        })
        var form = document.getElementById('myform');
        var oBtn = document.getElementById('btn');

        function checkForm() {
            var nametip = checkUserName();
            var passtip = checkPassword();
            var conpasstip = ConfirmPassword();
            var phonetip = checkPhone();
            var Emailtip = checkEmail();
            return nametip && passtip && conpasstip && phonetip && Emailtip;
        }

        function checkUserName() {
            var userName = document.getElementById('userName');
            var errorName = document.getElementById('nameErr');
            if (userName.value.length == 0) {
                errorName.innerHTML = "使用者名稱不能為空!";
                errorName.className = "error";
                return false;
            } else if (userName.value.length < 3) {
                errorName.innerHTML = "使用者名稱不合規範";
                errorName.className = "error";
                return false;
            } else {
                errorName.innerHTML = "√";
                errorName.className = "success";
                return true;

            }
        }

        function checkPassword() {
            var userPass = document.getElementById('userPasword');
            var errorPass = document.getElementById('passwordErr');
            var re = /^\w{6,11}$/
            if (!re.test(userPass.value)) {
                errorPass.innerHTML = "密碼不合規範";
                errorPass.className = "error";
                return false;
            } else {
                errorPass.innerHTML = "√";
                errorPass.className = "success";
                return true;
            }
        }

        function ConfirmPassword() {
            var userpasswd = document.getElementById('userPasword');
            var userConPassword = document.getElementById('userConfirmPasword');
            var errConPasswd = document.getElementById('conPasswordErr');
            if ((userpasswd.value) != (userConPassword.value) || userConPassword.value.length == 0) {
                errConPasswd.innerHTML = "上下密碼不一致"
                errConPasswd.className = "error";
                return false;
            } else {
                errConPasswd.innerHTML = "√"
                errConPasswd.className = "success";
                return true;
            }
        }

        function checkEmail() {
            var userEmali = document.getElementById('userEmail');
            var EmailErr = document.getElementById('EmailErr');
            var re = /\[email protected][a-z0-9]+\.[a-z]+/i;
            if (!re.test(userEmali.value)) {
                EmailErr.innerHTML = "郵箱格式錯誤"
                EmailErr.className = "error";
                return false;
            } else {
                EmailErr.innerHTML = "√"
                EmailErr.className = "success";
                return true;
            }
        }

        function checkPhone() {
            var userphone = document.getElementById('userPhone');
            var phonrErr = document.getElementById('phoneErr');
            var re = /^1[34578]\d{9}$/; //驗證手機號正則表示式 
            if (!re.test(userphone.value)) {
                phonrErr.innerHTML = "手機號碼不合規範"
                phonrErr.className = "error"
                return false;
            } else {
                phonrErr.innerHTML = "√"
                phonrErr.className = "success";
                return true;
            }
        }

        var show = document.getElementById("show");
        var oBtn2 = document.getElementById("btn2");

        var elements = new Array();
        var iden = new Array();
        var hob = new Array();
        var BasicInformation = form.elements["BasicInformation"];
        var oIden = form.elements["identity"];
        var oHob = form.elements["hobby"];

        function Xulie()
           {
            var data = {
                使用者名稱: elements[0],
                密碼: elements[1],
                身份: iden,
                愛好: hob,
                Email: elements[2],
                tel: elements[3]

            }
             str = JSON.stringify(data);
           }
        oBtn2.onclick = function () {
            for (var j = 0; j < BasicInformation.length; j++) {
                elements.push(BasicInformation[j].value);

            }
            for (var j = 0; j < oIden.length; j++) {
                if (oIden[j].checked)
                    iden.push(oIden[j].value);
            }
            for (var j = 0; j < oHob.length; j++) {
                if (oHob[j].checked)
                    hob.push(oHob[j].value);
            }
                 Xulie();

            show.innerHTML = str;
            console.log(str)
        }
        btn.onclick = function () {
            if (checkForm() == false) {
                form.setAttribute("onsubmit", "return false")
            }
            if (checkForm() == true)
            {
                form.setAttribute("onsubmit", "return true");
                Xulie();
            var xmlhttp;
               if (window.XMLHttpRequest) {
            //  IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行程式碼
            xmlhttp = new XMLHttpRequest();
            }
               else {
            // IE6, IE5 瀏覽器執行程式碼
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                  }
                  xmlhttp.open("POST", "str.json", true);
               //xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                  xmlhttp.send(); 
            }
        }
    
    </script>
</body>

</html>

相關推薦

Ajax應用——驗證

1.關於表單驗證:一般有兩種驗證方法:客戶端的(通過JavaScript);伺服器端的;a)原來客戶端JavaScript的缺點是:所有資料及邏輯操作完全在客戶端,因此要涉及到伺服器端的資料問題時,都需要最後點選按鈕,到伺服器端進行讀取驗證。現在改進的方法,Ajax實現更友好

AJAX應用驗證

一。表單常用事件           有三個,onsubmit(表單提交)事件,onfocus(獲得焦點)事件,onblur(失去焦點)事件。 1. onsubmit事件作用:組織或者允許表單的提交。 <form action="" method="post" o

easyui 驗證

pla focus res default code font led disable function 1 /** 2 * 擴展easyui的validator插件rules,支持更多類型驗證 3 */ 4 $.extend($.fn.val

SpringBoot驗證@Valid

BE index ror ner HR 大小 doctype implement 空格 SpringBoot提供了強大的表單驗證功能實現,給我們省去了寫驗證的麻煩; 這裏我們給下實例,提交一個有姓名和年齡的表單添加功能, 要求姓名不能為空,年齡必須是不小於18 ; 我們先新

.net學習驗證validator

 表單驗證是很常見的,一般除了前端需要驗證資料是否為空,還需要驗證資料格式是否符合要求,一般使用正則表示式驗證,當然,除了前端,後端一般也需要將資料進行驗證,比如客戶端(瀏覽器)將js等前端指令碼禁用,點選提交,那麼不符合規範的資料就會提交到後臺,這回導致系統出現問題。 .net中

JQUERY驗證案例

<!-- 需求: 使用者註冊頁面要有使用者名稱、密碼、確認密碼、郵箱 使用者名稱文字框:使用者名稱不能為空,且必須為數字與字母的6到12位的組合 密碼框:密碼不能為空,六到八位數字或字母的組合 確認密碼框:確認密碼不能為空,六到八位數字或字母

springboot+thymeleaf驗證

本篇講述在spring boot框架中使用thymeleaf庫實現表單提交。 1 新建thymeleaf工程 使用IDEA的spring initialize嚮導新建spring boot工程,選擇庫web和thymeleaf,這樣生成的工程中的pom.xml中包含web

微信小程式驗證

表單驗證 何為表單驗證呢? 百度百科給出的回答是這樣的: 表單驗證是javascript中的高階選項之一。JavaScript 可用來在資料被送往伺服器前對 HTML 表單中的這些輸入資料進行驗證  [1]  。 被 Jav

PHP驗證

一、表單安全 1、htmlspecialchars()函式 把特殊字元轉換為 HTML 實體。這意味著 < 和 > 之類的 HTML 字元會被替換為 &lt; 和 &gt; 。這樣可防止攻擊者通過在表單中注入 HTML 或 J

Springboot驗證

實體類 @TableName("lh_admin") public class Admin extends Model<Admin> { private static final long serialVersionUID = 1L; /**

SpringBoot系列(六)SpringBoot 驗證

本系列部落格將學習開發SpringBoot,快速開發專案 SpringBoot系列 (六):SpringBoot 之表單驗證 文件結構 SpringBoot 之表單驗證@Valid示例

微信小程式開發驗證(WxValidate使用)

微信小程式的開發框架個人感覺大體上跟VUE是差不多的,但是他的表單元件沒有自帶的驗證功能,因此開發小程式的表單驗證時候一般有兩種方法,一是自己裸寫驗證規則,但是需要比較紮實的正則表示式基礎,一種是利用官方社群開發的WxValidate外掛進行表單驗證。 WxValidat

Laravel摘記驗證

表單驗證 表單驗證是為了防止訪問者跳過客戶端驗證而造成的系統安全問題,一但非法使用者繞過客戶端驗證而伺服器端沒有加以驗證,這樣就是很不安全了,所以專案必須要進行伺服器端表單驗證。 Laravel 提供了多種不同的驗證方法來對應用程式傳入的資料進行驗證。

[js筆記] focus和blur事件驗證

focus 當一個元素獲得焦點時,這個DOM節點會觸發focus事件 blur 當一個元素失去焦點時,這個DOM節點會觸發blur事件 <!DOCTYPE html PU

JSP應用的自我理解三:JSP+Servlet實現驗證

示例說明:通過一個表單提交頁面提交給Servlet,Servlet獲取資訊,經過處理後,將資訊存入request物件中,如果使用者提交姓名為空,將重新返回登入首頁,否則,把提交的資訊全部顯示出來 下面具體實現了~~ 1、新建一個Dynamic WEB工程,名為formtt

驗證正則表達式

cti 信用卡 for 整除 develop 虛擬 accep das 一位 1. 手機號驗證 經網絡查詢可知,中國三大運營商號碼波段主要有: (1). 移動號段: 134 135 136 137 138 139 147 150 151 152 157 158

前端編程提高旅(十)----驗證插件與cookie插件

turn require 屬性 單選 method str 使用 art 存儲 實際項目開發中與用戶交互的常見手法就是採用表單的形式。取得用戶註冊、登錄等信息。而當用戶註冊或登錄後又須要記住用戶的登錄狀態。這就涉及到經常使用的兩個操作:表單驗證與cookie

jQueryValidation驗證插件使用

urn html .org utf span con require input 詳情 <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met

(十二)easyUI驗證完成登錄頁面

() 成功 options 表單提交 odi 1-1 java ima 1.4 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

php-2(驗證

eth left cit span dem 讓我 但是 cape ren PHP 表單驗證 本章節我們將介紹如何使用PHP驗證客戶端提交的表單數據。 PHP 表單驗證 在處理PHP表單時我們需要考慮安全性。 本章節我們將展示PHP表單數據安全處理