Form 表單校驗(bootstrapValidator)
<script type="text/javascript" src="/statics/js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="/statics/js/bootstrapValidator.min.js"></script>
<form class="form-signin" id="loginForm" action="/login">
<h2 style="color: #dddddd;">管理者登入</h2>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >賬号</span>
<input type="text" class="form-control" name="loginAccount" placeholder="請輸入賬号/使用者名" aria-describedby="basic-addon1">
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >密碼</span>
<input type="password" class="form-control" name="password" placeholder="請輸入密碼" aria-describedby="basic-addon1">
</div>
</div>
<br>
<button class="btn btn-lg btn-primary btn-block" type="submit" >登入</button>
</form>
$(function() {
$('#loginForm')//登入
.bootstrapValidator({
message: '登入校驗',
feedbackIcons: {
/*input狀态樣式圖檔*/
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
/*驗證:規則*/
loginAccount: {//驗證input項:驗證規則
message: '登入賬号驗證',
threshold : 2 , //有2字元以上才發送ajax請求,(input中輸入一個字元,插件會向伺服器發送一次,設定限制,6字元以上才開始)
validators: {
notEmpty: {//非空驗證:提示消息
message: '賬号/使用者名不能為空'
},
stringLength: {
min: 2,
max: 20,
message: '賬号/使用者名長度必須在2到20之間'
},
remote: {//ajax驗證。server result:{"valid",true or false} 向服務發送目前input name值,獲得一個json資料。例表示正确:{"valid",true}
url: '/checkAdmin',//驗證位址
message: '使用者不存在',//提示消息
delay : 1000,//每輸入一個字元,就發ajax請求,伺服器壓力還是太大,設定1秒發送一次ajax(預設輸入一個字元,送出一次,伺服器壓力太大)
type: 'POST',//請求方式
data:function(){
return {
loginAccount: $("#loginForm input[name='loginAccount']").val(),
loginName: $("#loginForm input[name='loginAccount']").val()
}
}
},
regexp: {
regexp: /^[A-Za-z0-9\u4e00-\u9fa5]+$/,
message: '賬号/使用者名由數字、字母、漢字組成'
}
}
},
password: {
message: '密碼無效',
validators: {
notEmpty: {
message: '密碼不能為空'
},
stringLength: {
min: 6,
max: 20,
message: '使用者名長度必須在6到20之間'
},
identical: {//相同
field: 'password', //需要進行比較的input name值
message: '兩次密碼不一緻'
},
different: {//不能和使用者名相同
field: 'username',//需要進行比較的input name值
message: '不能和使用者名相同'
},
regexp: {
regexp: /^[a-zA-Z0-9_\.]+$/,
message: '密碼由數字字母下劃線和.組成'
}
}
}
}
})
.on('success.form.bv', function (e) {//點選送出之後
//密碼加密
var password = $('#loginForm input[name=password]').val();
$('#loginForm input[name=password]').val($.md5(password))
// 終止重複送出
e.preventDefault();
// 得到form表單對象
var $form = $(e.target);
// 獲得bootstrap驗證對象
var bv = $form.data('bootstrapValidator');
// Use Ajax to submit form data 送出至form标簽中的action,result自定義
$.post($form.attr('action'), $form.serialize(), function (data) {
layer.msg(data.msg);
if(data.code == 1){
common.method.GoUrl("/page/base");
}else{
$('#loginForm button[type=submit]').attr("disabled",false);
}
});
});
});
效果圖
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>背景管理系統</title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<script type="text/javascript" src="/statics/js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="/statics/js/md5.js"></script>
<script type="text/javascript" src="/statics/js/bootstrapValidator.min.js"></script>
<script type="text/javascript" src="/statics/layer-v3.1.1/layer/layer.js"></script>
<script type="text/javascript" src="/statics/js/common.js"></script>
<!-- 最新版本的 Bootstrap 核心 CSS 檔案 -->
<link rel="stylesheet" href="/statics/css/bootstrap.min.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >
<!-- 可選的 Bootstrap 主題檔案(一般不用引入) -->
<link rel="stylesheet" href="/statics/css/bootstrap-theme.min.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >
<!-- 最新的 Bootstrap 核心 JavaScript 檔案 -->
<script src="/statics/js/bootstrap.min.js" ></script>
</head>
<body style="background: black url(../statics/images/login.jpg) no-repeat fixed top;" >
<div class="container" style="padding-top:10%;">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6" >
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#login" target="_blank" rel="external nofollow" aria-controls="login" role="tab" data-toggle="tab">賬号登入</a></li>
<li role="presentation"><a href="#region" target="_blank" rel="external nofollow" aria-controls="region" role="tab" data-toggle="tab">申請賬号</a></li>
<li role="presentation"><a href="#regionInfo" target="_blank" rel="external nofollow" aria-controls="regionInfo" role="tab" data-toggle="tab">申請資訊查詢</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="login">
<form class="form-signin" id="loginForm" action="/login">
<h2 style="color: #dddddd;">管理者登入</h2>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >賬号</span>
<input type="text" class="form-control" name="loginAccount" placeholder="請輸入賬号/使用者名" aria-describedby="basic-addon1">
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >密碼</span>
<input type="password" class="form-control" name="password" placeholder="請輸入密碼" aria-describedby="basic-addon1">
</div>
</div>
<br>
<button class="btn btn-lg btn-primary btn-block" type="submit" >登入</button>
</form>
</div>
<div role="tabpanel" class="tab-pane" id="region">
<form class="form-signin" id="regionForm" action="/region">
<h2 style="color: #dddddd;">管理者申請</h2>
<div class="row">
<div class="col-sm-1"></div>
<div class="col-sm-10">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >名稱</span>
<input type="text" class="form-control" name="loginName" placeholder="請輸入使用者名" aria-describedby="basic-addon1">
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" style="color: red" >賬号</span>
<input type="number" class="form-control" name="loginAccount" placeholder="請輸入登入賬号" aria-describedby="basic-addon1">
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" style="color: red" >密碼</span>
<input type="password" class="form-control" name="password" placeholder="請輸入登入密碼" aria-describedby="basic-addon1">
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >昵稱</span>
<input type="text" class="form-control" name="name" placeholder="請輸入昵稱" aria-describedby="basic-addon1">
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >年齡</span>
<input type="number" class="form-control" name="age" min="0" max="120"/>
</div>
</div>
</div><!-- /.col-lg-6 -->
<div class="col-lg-6">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon" >性别</span>
<input type="text" id="sex" class="form-control" placeholder="請選擇性别" readonly="readonly" aria-label="...">
<input type="hidden" name="sex"/>
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">請選擇 <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right">
<li><a sex="true" onclick="$('input[name=sex]').val('true');$('#sex').val('男')">男</a></li>
<li role="separator" class="divider"></li>
<li><a sex="false" onclick="$('input[name=sex]').val('false');$('#sex').val('女')">女</a></li>
</ul>
</div><!-- /btn-group -->
</div><!-- /input-group -->
</div>
</div><!-- /.col-lg-6 -->
</div><!-- /.row -->
<div class="form-group">
<div class="row">
<div class="col-lg-12" >
<textarea name="infoContent" rows="5" style="width: 100%;" placeholder="注冊申請消息,管理者看到後會盡快給您審批通過的!!!"></textarea>
</div><!-- /.col-lg-6 -->
</div>
</div>
<br>
<button class="btn btn-lg btn-primary btn-block" type="submit" >送出</button>
<br><br>
<br><br>
</div>
<div class="col-sm-1"></div>
</div>
</form>
</div>
<div role="tabpanel" class="tab-pane" id="regionInfo">
<form class="form-signin" >
<h2 style="color: #dddddd;">申請資訊查詢</h2>
<div class="input-group">
<span class="input-group-addon" >請輸入查詢賬号</span>
<input type="text" class="form-control" id="searchRegionInfo" placeholder="請輸入查詢賬号...">
<span class="input-group-btn"><button class="btn btn-default" id="searchRegionBut" type="button">搜尋</button></span>
</div>
<br>
<div class="form-group" style="color: #dddddd;display: none;" id="listInfo">
<table class="table table-striped table-bordered row" style="margin-left: 0px;" >
<thead>
<tr>
<th >申請時間</th>
<th >申請标題</th>
<th >申請内容</th>
<th >申請狀态</th>
</tr>
</thead>
<tbody id="listItem">
</tbody>
</table>
</div>
<br>
<br>
</form>
</div>
</div>
</div>
<div class="col-md-3"></div>
</div>
</div>
</body>
<script>
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
e.target // newly activated tab
e.relatedTarget // previous active tab
})
$("#searchRegionBut").click(function () {
var regionInfo = $("#searchRegionInfo").val().trim();
if(regionInfo != null && regionInfo != ""){
$.ajax({
url:"/serchRegionInfo",
data:{loginAccount:regionInfo},
success:function (data) {
layer.msg(data.msg);
if(data.code == 1){
$("#listInfo").show();
$("#listItem").empty();
$.each(data.data,function (i,t) {
var str = getDateToString(new Date( t.sendTime*1 ));
$("#listItem").append('<tr>\n' +
' <th class="min-mobile-l col-sm-2" data-date-format="yyyy-mm-dd">'+str+'</th>\n' +
' <th class="min-mobile-l col-sm-3">'+t.title+'</th>\n' +
' <th class="min-mobile-l col-sm-5">'+t.content+'</th>\n' +
' <th class="min-mobile-l col-sm-2">'+(t.isRead?'待審批':'未讀')+'</th>\n' +
' </tr>')
})
}else{
$("#listInfo").hide();
}
}
})
}else{
layer.msg("請輸入要查詢的新增賬號!!!")
}
})
function getDateToString(date){
return date.getFullYear() + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日 " + date.getHours() + "時" + date.getMinutes() + "分" + date.getSeconds() + "秒";
}
$(function() {
$('#loginForm')//登入
.bootstrapValidator({
message: '登入校驗',
feedbackIcons: {
/*input狀态樣式圖檔*/
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
/*驗證:規則*/
loginAccount: {//驗證input項:驗證規則
message: '登入賬号驗證',
threshold : 2 , //有2字元以上才發送ajax請求,(input中輸入一個字元,插件會向伺服器發送一次,設定限制,6字元以上才開始)
validators: {
notEmpty: {//非空驗證:提示消息
message: '賬号/使用者名不能為空'
},
stringLength: {
min: 2,
max: 20,
message: '賬号/使用者名長度必須在2到20之間'
},
remote: {//ajax驗證。server result:{"valid",true or false} 向服務發送目前input name值,獲得一個json資料。例表示正确:{"valid",true}
url: '/checkAdmin',//驗證位址
message: '使用者不存在',//提示消息
delay : 1000,//每輸入一個字元,就發ajax請求,伺服器壓力還是太大,設定1秒發送一次ajax(預設輸入一個字元,送出一次,伺服器壓力太大)
type: 'POST',//請求方式
data:function(){
return {
loginAccount: $("#loginForm input[name='loginAccount']").val(),
loginName: $("#loginForm input[name='loginAccount']").val()
}
}
},
regexp: {
regexp: /^[A-Za-z0-9\u4e00-\u9fa5]+$/,
message: '賬号/使用者名由數字、字母、漢字組成'
}
}
},
password: {
message: '密碼無效',
validators: {
notEmpty: {
message: '密碼不能為空'
},
stringLength: {
min: 6,
max: 20,
message: '使用者名長度必須在6到20之間'
},
identical: {//相同
field: 'password', //需要進行比較的input name值
message: '兩次密碼不一緻'
},
different: {//不能和使用者名相同
field: 'username',//需要進行比較的input name值
message: '不能和使用者名相同'
},
regexp: {
regexp: /^[a-zA-Z0-9_\.]+$/,
message: '密碼由數字字母下劃線和.組成'
}
}
}
}
})
.on('success.form.bv', function (e) {//點選送出之後
//密碼加密
var password = $('#loginForm input[name=password]').val();
$('#loginForm input[name=password]').val($.md5(password))
// 終止重複送出
e.preventDefault();
// 得到form表單對象
var $form = $(e.target);
// 獲得bootstrap驗證對象
var bv = $form.data('bootstrapValidator');
// Use Ajax to submit form data 送出至form标簽中的action,result自定義
$.post($form.attr('action'), $form.serialize(), function (data) {
layer.msg(data.msg);
if(data.code == 1){
common.method.GoUrl("/page/base");
}else{
$('#loginForm button[type=submit]').attr("disabled",false);
}
});
});
$('#regionForm')//注冊
.bootstrapValidator({
message: '登入校驗',
feedbackIcons: {/*input狀态樣式圖檔*/
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {/*驗證:規則*/
loginName: {//驗證input項:驗證規則
message: '使用者名異常',
threshold : 2 , //有6字元以上才發送ajax請求,(input中輸入一個字元,插件會向伺服器發送一次,設定限制,6字元以上才開始)
validators: {
stringLength: {
min: 2,
max: 20,
message: '使用者名長度必須在2到20之間'
},
remote: {//ajax驗證。server result:{"valid",true or false} 向服務發送目前input name值,獲得一個json資料。例表示正确:{"valid",true}
url: '/checkAdmin',//驗證位址
message: '使用者已存在',//提示消息
delay : 1000,//每輸入一個字元,就發ajax請求,伺服器壓力還是太大,設定1秒發送一次ajax(預設輸入一個字元,送出一次,伺服器壓力太大)
type: 'POST',//請求方式
data:function(){
return {
loginName: $("#regionForm input[name='loginName']").val(),
isLogin:false
}
}
},
regexp: {
regexp: /^[A-Za-z0-9\u4e00-\u9fa5]+$/,
message: '使用者名由數字、字母、漢字組成'
}
}
},
loginAccount: {//驗證input項:驗證規則
message: '登入賬号驗證',
threshold : 2 , //有2字元以上才發送ajax請求,(input中輸入一個字元,插件會向伺服器發送一次,設定限制,6字元以上才開始)
validators: {
notEmpty: {//非空驗證:提示消息
message: '賬号/使用者名不能為空'
},
stringLength: {
min: 2,
max: 20,
message: '賬号/使用者名長度必須在2到20之間'
},
remote: {//ajax驗證。server result:{"valid",true or false} 向服務發送目前input name值,獲得一個json資料。例表示正确:{"valid",true}
url: '/checkAdmin',//驗證位址
message: '使用者已存在',//提示消息
delay : 1000,//每輸入一個字元,就發ajax請求,伺服器壓力還是太大,設定1秒發送一次ajax(預設輸入一個字元,送出一次,伺服器壓力太大)
type: 'POST',//請求方式
data:function(){
return {
loginAccount: $("#regionForm input[name='loginAccount']").val(),
isLogin:false
}
}
},
regexp: {
regexp: /^[A-Za-z0-9\u4e00-\u9fa5]+$/,
message: '賬号/使用者名由數字、字母、漢字組成'
}
}
},
password: {
message: '密碼無效',
validators: {
notEmpty: {
message: '密碼不能為空'
},
stringLength: {
min: 6,
max: 20,
message: '使用者名長度必須在6到20之間'
},
identical: {//相同
field: 'password', //需要進行比較的input name值
message: '兩次密碼不一緻'
},
different: {//不能和使用者名相同
field: 'username',//需要進行比較的input name值
message: '不能和使用者名相同'
},
regexp: {
regexp: /^[a-zA-Z0-9_\.]+$/,
message: '密碼由數字字母下劃線和.組成'
}
}
},
name: {
validators: {
stringLength: {
min: 1,
max: 20,
message: '使用者名長度必須在1到20之間'
}
}
},
age: {
validators: {
regexp: {
regexp: /^(?:[1-9][0-9]?|1[01][0-9]|120)$/,
message: '年齡範圍為1-120'
}
}
}
}
})
.on('success.form.bv', function(e) {//點選送出之後
//密碼加密
var password = $('#regionForm input[name=password]').val();
$('#regionForm input[name=password]').val($.md5(password))
// 終止重複送出
e.preventDefault();
// 得到form表單對象
var $form = $(e.target);
// 獲得bootstrap驗證對象
var bv = $form.data('bootstrapValidator');
// Use Ajax to submit form data 送出至form标簽中的action,result自定義
$.post($form.attr('action'), $form.serialize(), function(data) {
layer.msg(data.msg);
});
});
});
</script>
</html>
解釋一下
md5.js
| //密碼加密
var password = $('#loginForm input[name=password]').val();
$('#loginForm input[name=password]').val($.md5(password))
頁面密碼加密傳輸 |
layer.js
| 友好型提示 |
bootstrapValidator.min.js
| bootstarp的校驗插件,詳見上文 |
- 本頁面是基于bootstarp做的,是以要引入bootstarp的js和css才可以出來一上效果
- 所有外部檔案(common.js 是自己定義的,這個可以不要)
<script type="text/javascript" src="/statics/js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="/statics/js/md5.js"></script>
<script type="text/javascript" src="/statics/js/bootstrapValidator.min.js"></script>
<script type="text/javascript" src="/statics/layer-v3.1.1/layer/layer.js"></script>
<script type="text/javascript" src="/statics/js/common.js"></script>
<!-- 最新版本的 Bootstrap 核心 CSS 檔案 -->
<link rel="stylesheet" href="/statics/css/bootstrap.min.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >
<!-- 可選的 Bootstrap 主題檔案(一般不用引入) -->
<link rel="stylesheet" href="/statics/css/bootstrap-theme.min.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >
<!-- 最新的 Bootstrap 核心 JavaScript 檔案 -->
<script src="/statics/js/bootstrap.min.js" ></script>