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;
}
}
謝謝!!!