1. 程式人生 > >Juqyer前端基本驗證(二)

Juqyer前端基本驗證(二)

“兩個蝴蝶飛”特別喜歡"java1234知識分享網"小峰的實用主義,所以本文及其系列文章均是採用實用主義,從專案和程式碼的角度去分析。由於本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。特別感謝"java1234知識分享網 "和"黑馬程式設計師官網",所有的資料大部分是兩者提供,為了方便書寫,故不一一指名出處,請諒解,非常抱歉。

上一章簡單介紹了Jquery前端基本驗證(一),如果沒有看過,請觀看上一章

這裡採用Bootstrap框架進行前端美化,如果不熟悉Bootstrap框架,可以參考Bootstrap官方文件。 去官網

一 用Bootstrap美化頁面,採用網路端引用

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>封裝外掛+Bootstrap進行驗證</title>
<!-- 引入網路端的Juqery外掛和Bootstrap外掛 主要是方便書寫 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">  
	<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
	<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
	<!-- 引入自定義的js -->
	<script src="Plugins/register.js"></script>
</head>
<body>
	<div class="container">
		<div class="row">
			<h2 class="col-md-10 text-center">Bootstrap+自定義驗證</h2>
		</div>
		<div class="row">
			<!-- 裡面是具體的表單 -->
			<form class="form-horizontal" id="myform" method="post"
				action="#">
				<!-- 第一行使用者名稱 -->
				<div class="form-group">
					<label for="loginName" class="col-md-2 control-label">使用者名稱:</label>
					<div class="col-md-6 has-feedback">
						<input type="text" class="form-control inputClass" id="loginName"
							placeholder="請輸入你的使用者名稱" name="loginName"
							value=""> <span
							class="glyphicon glyphicon-user form-control-feedback"></span>
					</div>
					<label
						class="col-md-4 labelTitle text-danger glyphicon glyphicon-remove"
						id="loginNameTitle"></label>
				</div>
				<!-- 第二行密碼-->
				<div class="form-group">
					<label for="password" class="col-md-2 control-label ">密碼</label>
					<div class="col-md-6">
						<input type="password" class="form-control inputClass"
							id="password" placeholder="密碼區分大小寫" name="password"
							value=""><span class="glyphicon glyphicon-lock form-control-feedback"></span>
					</div>
					<label class="col-md-4 labelTitle text-danger glyphicon glyphicon-remove"
						id="passwordTitle"></label>
				</div>
				<!-- 第二行密碼-->
				<div class="form-group">
					<label for="email" class="col-md-2 control-label ">郵箱</label>
					<div class="col-md-6">
						<input type="text" class="form-control inputClass"
							id="email" placeholder="請輸入正確的郵箱" name="email"
							value="">

					</div>
					<label style="margin-left: -40px; margin-top: 10px;"></label> 
					<label class="col-md-4 labelTitle text-danger glyphicon glyphicon-remove"
						id="emailTitle"></label>
				</div>
				<!-- 該登入和重置的框了 -->
				<div class="form-group">
					<div class="col-md-3 col-md-offset-3">
						<input type="submit" class="btn btn-success btn-block" id="submit"
							value="登入" style="margin-left: -30px" />
					</div>
					<div class="col-md-2 col-md-offset-1">
						<button type="reset" class="btn btn-success btn-sm"
							style="margin-left: -30px">重置</button>
					</div>
				</div>
			</form>
		</div>
	</div>
</body>
</html>

重啟伺服器,檢查頁面,是這個樣式的。

 其中頁面中,需要注意的點有三個:

1. 每一個input標籤裡面,class 都有一個.inputClass 的類。 對每一個需要驗證的input框都新增一個inputClass。

2. 每一個input標籤都有一個它所對應的label標籤,這裡顯示提示資訊,且這個標籤的id命名為. input標籤的Id+Title。

3. 每一個對應的label標籤,都有一個對應的labelTitle的類。

二    新增基本JS  validateJS.

在plugins資料夾下面新增一個validateJS.js, 裡面放置的內容是:

validateJS.js

/**
 * 這是一個自定義封裝的驗證
 */
$(function(){
	/**
	 * 1.對每一個labelError的標籤進行迴圈遍歷驗證
	 */
	$(".labelTitle").each(function(){
		 showTitle($(this));
	})
	/**
	 * 2.當標籤移入時進行移入的判斷
	 */
	$(".inputClass").focus(function(){
		//1.獲取進入的input框所在的id  使inputid與LabelId有統一的關係
		var id=$(this).attr("id");
		//2. 根據id獲得當前的標籤
		var $label=$("#"+id+"Title");
		//3. 將該標籤的內容置空
		$label.text("");
		//4. 呼叫方法,看這個標籤是否顯示
		showTitle($label);
	})
	/**
	 * 3.當滑鼠移出這個標籤時,進行移出的驗證判斷.
	 */
	$(".inputClass").blur(function(){
		//1. 得到移出標籤的這個id
		var id=$(this).attr("id");
		//設定要執行的是哪一個方法  toUpperCase() substring  不要忘記()
		//2. 根據id去拼湊function的方法,這個方法起得應該是: loginName--->validateLoginName();
		var funName="validate"+id.substring(0,1).toUpperCase()+id.substring(1)+"()";
		//alert(funName);
		//3.用eval()去驗證這個方法
		eval(funName);
	})
})
/**
 * 4 寫showError方法,去判斷這個標籤是否顯示。
 * 如果這個標籤有值,則顯示。
 * 如果沒有值,則不顯示.
 */
function showTitle(ele){
	//看是否有文字,如果有文字,則顯示。沒有,則隱藏
	var text=trim(ele.text());
	/**
	 * 1. 如果輸入的值為null,那麼就讓這個標籤不顯示。
	 * 如果輸入的是ok,那麼就顯示一個對號。
	 * 如果輸入的是oks開頭,那麼顯示對號的同時,顯示後面的語句。
	 * 如果是其它的,就表示錯誤資訊,顯示錯號和錯誤資訊。
	 */
	if(!text){
		//什麼都不顯示
		ele.css("display","none");
	}else if (text=='ok'){
		//清空資訊
		ele.text('');
		//顯示資訊框
		ele.css("display","");
		//顯示對號
		addOk(ele);
	}else if (text.indexOf('oks')==0){
		//顯示之後的資訊
		ele.text(text.substr(3,text.length));
		ele.css("display","");
		//顯示對號
		addOk(ele);
	}else{
		ele.css("display","");
		addRemove(ele);
	}
}
/**
 * 5 新增對號
 */
function addOk(ele){ 
	//移除錯誤的
	ele.removeClass('glyphicon-remove').removeClass('glyphicon');
	//新增正確的
	ele.addClass('glyphicon').addClass('glyphicon-ok');
}
/**
 * 6 新增錯誤號
 */
function addRemove(ele){ 
	//移除錯誤的
	ele.removeClass('glyphicon-ok').removeClass('glyphicon');
	//新增正確的
	ele.addClass('glyphicon').addClass('glyphicon-remove');
}
/**
 * 7 去除空格
 */
function trim(str) {
	if (str == null) {
	    return "";
	}
	return str.replace(/^\s*(.*?)[\s\n]*$/g,'$1');   
}

在Bootstrap裡面新增這個JS

<!-- 引入自定義的js -->
	<script src="Plugins/validateJS.js"></script>

重啟伺服器,進行相應的檢視資訊,發現*號已經不見了。

三  新增頁面相對應的驗證

在頁面login.jsp同級的目錄下建立一個loginValidate.js的驗證頁面。這裡只表示驗證,沒有其他的JS操作,如驗證碼操作,忘記密碼操作等。 將其引入到jsp頁面。 這個loginValidate.js,要位於validateJS.js的後面。

<!-- 引入登入頁面的驗證 -->
	<script src="loginValidate.js"></script>

在loginValidate.js頁面中,直接寫驗證的方法。 注意,這個驗證方法的命名,應該是validate+Id首字母大寫名稱.

如id為 password,則驗證為validatePassword, id為email,則驗證為validateEmail方法。

這裡只驗證password和email方法。

四  驗證password欄位  validatePassword

使密碼顯示對號的同時,顯示後面的資訊。

/*
 * 對密碼進行的相關驗證
 */
function validatePassword(){
	//設定物件
	var id="password";
	//得到值
	var value=$("#"+id).val();
	//設定標籤Label的物件.
	var $label=$("#"+id+"Title");
	if(!value){
		$label.text(" 密碼不能為空");
		showTitle($label);
		return false;
	}
	if(!/^\w{6,20}$/.test(value)){
		//alert("不符合");
		//如果為空,則使其對應的label的text進行設定,呼叫showTitle()方法.
		$label.text(" 密碼長度在6~20之間");
		showTitle($label);
		//返回false
		return false;
	}else{
		$label.text("oks密碼輸入正確");
		showTitle($label);
		return true;
	}
	
}

五  驗證Email欄位, validateEmail

/*
 * 對郵箱進行的相關驗證
 */
function validateEmail(){
	//設定物件
	var id="email";
	//得到值
	var value=$("#"+id).val();
	//設定標籤Label的物件.
	var $label=$("#"+id+"Title");
	if(!value){
		//如果為空,則使其對應的label的text進行設定,呼叫showTitle()方法.
		$label.text(" 郵箱地址不能為空");
		showTitle($label);
		//返回false
		return false;
	}
	if(!/^[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value)){
		//alert("不符合");
		//如果為空,則使其對應的label的text進行設定,呼叫showTitle()方法.
		$label.text(" 郵箱格式不正確");
		showTitle($label);
		//返回false
		return false;
	}else{
		$label.text("ok");
		showTitle($label);
		return true;
	}
}

六  重啟伺服器,進行相關的驗證檢測

如果不輸入值的話:

如果輸入的是錯誤的值的話:

輸入正確的值的話:

一個顯示提示資訊,一個不顯示提示資訊。

然而,現在仍然有一個比較大的問題,就是如果錯誤時,點選按鈕,仍然是可以提交的。

七  解決Form表單的驗證

在Juqery中進行相應的新增,也就是在loginValidate.js中,新增一個Jquery方法。

$(function(){
	//實現在提交之時,對所有的input進行再次的判斷,放在jquery中.
	$("#myform").submit(function(){
		//return true;
		return validatePassword()&&validateEmail();
	})
})

此時,如果頁面上顯示錯誤,

是無法進行提交操作的。

八  總結

這個提示比較好,頁面也相對美觀,但是如果提示資訊過長了呢? 那麼label的Title標籤不也是要更長嗎? 而且,這些驗證修改時,也相對來說比較麻煩。

九 loginValidate.js檔案

/**
 * 這裡表示登入頁面的驗證
 */
$(function(){
	//實現在提交之時,對所有的input進行再次的判斷,放在jquery中.
	$("#myform").submit(function(){
		//return true;
		return validatePassword()&&validateEmail();
	})
})
/*
 * 對密碼進行的相關驗證
 */
function validatePassword(){
	//設定物件
	var id="password";
	//得到值
	var value=$("#"+id).val();
	//設定標籤Label的物件.
	var $label=$("#"+id+"Title");
	if(!value){
		$label.text(" 密碼不能為空");
		showTitle($label);
		return false;
	}
	if(!/^\w{6,20}$/.test(value)){
		//alert("不符合");
		//如果為空,則使其對應的label的text進行設定,呼叫showTitle()方法.
		$label.text(" 密碼長度在6~20之間");
		showTitle($label);
		//返回false
		return false;
	}else{
		$label.text("oks密碼輸入正確");
		showTitle($label);
		return true;
	}
	
}
/*
 * 對郵箱進行的相關驗證
 */
function validateEmail(){
	//設定物件
	var id="email";
	//得到值
	var value=$("#"+id).val();
	//設定標籤Label的物件.
	var $label=$("#"+id+"Title");
	if(!value){
		//如果為空,則使其對應的label的text進行設定,呼叫showTitle()方法.
		$label.text(" 郵箱地址不能為空");
		showTitle($label);
		//返回false
		return false;
	}
	if(!/^[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value)){
		//alert("不符合");
		//如果為空,則使其對應的label的text進行設定,呼叫showTitle()方法.
		$label.text(" 郵箱格式不正確");
		showTitle($label);
		//返回false
		return false;
	}else{
		$label.text("ok");
		showTitle($label);
		return true;
	}
}

謝謝!!!