基於Bootstrap與jQuery-Validate的個人簡易封裝
先看下我運用到實際專案裡面的介面效果:
移動端效果:
基本上來說,採用氣泡式的提示能帶來更好的使用者體驗,而且不會過多的佔用頁面的空間,在風格上與Bootstrap保持了一致,基本上還是採用原生的jQuery-validate的檢驗規則以及自定義規則,更改了部分少量原始碼(加了一個方法),其他沒有變化。
首先,我們先看下怎麼呼叫的:
var vali = $("#XXX").formValidate({
rules : {
name:{
required:true
},
loginName:{
required:true
},
mail : {
required : true,
email : true
},
sex : {
required : true
},
tel:{
required : true,
isPhone:true
},
idCard :{
required : true ,
isIdCard : true
}
},
messages : {
name:"請輸入姓名",
loginName:"請輸入登入名",
sex : "請選擇性別",
mail : {
required : "請輸入郵箱地址",
email : "郵箱地址不正確"
},
tel:{
required : "請輸入電話號碼" ,
isPhone : "電話號碼格式不正確"
},
idCard :{
required : "請輸入身份證號",
isIdCard : "身份證號格式不正確"
}
}
});
使用validate檢驗框架的小夥伴們應該很熟悉rules與messages屬性,本人封裝的檢驗框架也僅僅只需要這兩個屬性即可完成檢驗,獲取了檢驗物件vali後,可以使用vali.form()檢驗,最後的效果就是上圖的效果。
那麼, 這具體是怎麼實現呢?
在這之前,我們需要具體瞭解下validate框架的API,如果你對這個框架的API很熟悉,則可以跳過此處。
我封裝的validate 使用的屬性不多,基本也就如下幾個:
- focusInvalid: 檢驗失敗以後失敗的物件獲得焦點
- onkeyup:輸入字元時是否立即檢驗
- submitHandler:表單提交時觸發的方法
- rules:檢驗規則
- messages:失敗時顯示的提示語
- errorPlacement:自定義失敗時提示語的位置
- success:自定義成功時提示語的位置
如果想要更加詳細的API,請自行百度。
第二步,由於使用Bootstrap的氣泡外掛,我們需要了解下如何使用該外掛,該外掛在Bootstrap官網上有介紹,這裡我採用的js呼叫該外掛。
js的呼叫該外掛很簡單,引入Bootstrap.js與css以後使用
$("#XXX").tooltip();
即可。
可以傳入的物件:
- title:氣泡中的文字
- placement:方位,一個有四個上,下,左,右。我使用的是”bottom”(下)
看完基礎部分,下面就開始看下怎麼實現了。
引入jQuery,Bootstrap,jQuery-validate這些外掛後我們先編寫一個外掛框架
$.fn.formValidate = function (options) {
return $(this).validate({
focusInvalid : true,
onkeyup : function(element) { $(element).valid(); },
submitHandler: function (form) {
if(options.submit)
{
options.submit(form);
}
},
rules: options.rules,
messages: options.messages
})
}
這樣我們就可以通過$(“#XXX”).formValidate({})來呼叫這段程式碼完成檢驗。
由於我沒有使用validate預設的提示,所以需要使用errorPlacement來自定義提示語位置
errorPlacement屬性傳入兩個引數
- error 錯誤本體,可以通過error.text()方法獲取錯誤提示語
- element 錯誤所在dom元素的引用
我的errorPlacement主要做了三件事:初始化氣泡,使文字框外邊框變紅,在文字框中加上一個X標識錯誤
errorPlacement程式碼:
errorPlacement : function (error, element)
{
element.tooltip("destroy");//清除以前的氣泡
element.tooltip({//重新生成氣泡
title : error.text(),
placement : 'bottom'
})
var par = $(element).parent();//獲取父元素,為了加上紅色邊框使錯誤更加醒目
par.addClass("has-error");
var info = $('<span class="glyphicon glyphicon-remove-circle form-control-feedback" aria-hidden="true" style="right:20px"></span>');//就是文字框右邊那個紅色的X
if(par.find("span").length != 0)//清除之前紅色的X
{
par.children("span").remove();
}
info.appendTo(par);//將紅色的X追加到文字框上
}
success 方法主要就是清除errorPlacement做的那些事並告知使用者該項正確。
success 屬性傳入兩個引數
- str 不知道啥東西,我沒用過這個東西
- element 所在dom元素的引用
success程式碼:
success : function (str,element) {
element.tooltip("destroy");//清除氣泡
var par = $(element).parent();//獲取元素父元素便於使文字框有紅變綠
par.removeClass("has-error");//恢復文字框邊框顏色
par.addClass("has-success");//使文字框邊框顏色變成綠色
if(par.find("span").length != 0)//清除錯誤時文字框裡面的紅色X
{
par.children("span").remove();
}
var info = $('<span class="glyphicon glyphicon-ok-circle form-control-feedback" aria-hidden="true" style="right:20px"></span>');//就是一個勾
info.appendTo(par);
}
到此,基本上就結束了,但是問題隨之而來,以新增為例:如果使用者檢驗失敗了關閉了彈窗,下次再開啟彈窗,他將會看到被檢驗過的表單,即全部都是錯誤提示的表單,表單的檢驗未初始化,影響了使用者體驗。為了解決這個問題,我找了很多資料,但都沒有實際進展,決定動用殺手鐗——改原始碼。
開啟jQuery-validate原始碼,在resetElements 方法裡做一些改動
完整的resetElements程式碼
resetElements: function( elements ) {
var i;
if(this.settings.resetfunction)
{
for ( i = 0; elements[ i ]; i++ ) {
this.settings.resetfunction.call( this, elements[ i ],
this.settings.errorClass, "" );
}
}
else if ( this.settings.unhighlight ) {
for ( i = 0; elements[ i ]; i++ ) {
this.settings.unhighlight.call( this, elements[ i ],
this.settings.errorClass, "" );
this.findByName( elements[ i ].name ).removeClass( this.settings.validClass );
}
} else {
elements
.removeClass( this.settings.errorClass )
.removeClass( this.settings.validClass );
}
}
也就加了一些關於resetfunction的東西,這些東西允許你在validate配置時使用resetfunction這個屬性初始化表單檢驗。
配置的resetfunction與success類似,只是沒有提示成功的操作,這裡不再重述。
已知問題:
在非required=true的檢驗項中,如果使用者輸入了錯誤的格式,隨後使用者刪除了輸入內容,文字框沒有被重置,仍然顯示錯誤提示,雖然儲存沒有問題,但是給客戶覺得這裡好像必須輸入一樣。
如圖
Demo下載地址:
原創帖,希望轉載時附帶上作者資訊,謝謝。
相關推薦
基於Bootstrap與jQuery-Validate的個人簡易封裝
先看下我運用到實際專案裡面的介面效果: 移動端效果: 基本上來說,採用氣泡式的提示能帶來更好的使用者體驗,而且不會過多的佔用頁面的空間,在風格上與Bootstrap保持了一致,基本上還是採用原生的jQuery-validate的檢驗規則以及自定義規則
TP5 引入bootstrap與jquery
bootstrap #下載生產環境的版本 https://v3.bootcss.com/getting-started/#download jquery #生產版本 http://jquery.com/ tp中使用 #將解壓後的bootstrap中js、css、fon
基於bootstrap的JQuery中所有checkBox預設選中
js部分 //當頁面載入成功之後,所有checkbox都預設選中 $("#definedColumns input[type='checkbox']").prop("checked",true)
分享幾款基於bootstrap和jquery的分頁外掛
1.第一款 jquery.pagination 定製修改版 地址:http://hooray.github.io/jquery.pagination/ github地址:https://github.com/hooray/jquery.pagination 2
基於Bootstrap使用jQuery實現簡單可編輯表格
editTable.js 提供編輯表格當前行、新增一行、刪除當前行的操作,其中可以設定引數,如: operatePos 用於設定放置操作的列,從0開始,-1表示以最後一列作為放置操作的列;(這裡的操作包括 編輯當前行、在當前行下新增一行、刪除當前行) han
Nodejs+MongoDB+Bootstrap+esj搭建的個人簡易部落格
Nodejs+MongoDB+jQuery+Bootstrap-esj搭建的個人簡易部落格 主要功能 前臺 :進入首頁 文章檢視及文章分類:可自行在專案中增加自己喜歡的文章型別。 留言板 後
yii 2.0 自帶驗證與jquery validate結合的一次嘗試
背景:在公司DMS系統,使用的是Yii 2.0的框架,而前端驗證使用的是validate,之前的做法是在前端驗證完以後,資料傳到後端,自己寫驗證,大概就是這種畫風 //php頁面 if (empty($data['chinese_name'])) {
基於Bootstrap+jQuery.validate Form表單驗證實踐
<!DOCTYPE html> <html> <head> <title>Bootstrap Form Template</title> <meta charset="utf-8" />
jQuery基於json與cookie實現購物車的方法
構造 exp als com else cookies 一個 可選參數 int /** * 添加商品及數量到購物車cookie中,返回當前商品在cookie中的總數 */ function AddToShoppingCar(id, num, t
Jquery Easyui與Jquery Bootstrap的比較
1.easyui是js框架 ;bootstrap 是css框架 ,bootstrap = 樣式庫 + 一堆jQuery外掛,順便解釋一句,如果你只需要bootstrap的樣式,你完全不用引入jQuery和bootstrap的js檔案。 2.通常來看 bootstrap 適合做WEB前端、
原生封裝Ajax與jQuery實現Ajax
原生封裝Ajax 對比使用JQuery直接封裝好的ajax方法,利用原生封裝AJax在使用的程式碼就要多得多,但是,原生封裝AJax並不難,在剛接觸到AJax時,相信很多人都不明白是什麼東西,下面我舉出兩個例子、分別用原生封裝Ajax實現demo與直接呼叫JQ
基於Bootstrap+jQuery+Thinkphp+Mongodb實戰開發社群交流網站平臺
我這裡有套課程想和大家分享,需要的朋友可以加我qq和我聯絡。QQ2059055336. 一、本課程是怎麼樣的一門課程(全面介紹) 1.1、課程的背景 隨著開源專案和nosql資料庫的流行,越來越多的網站使用bootstrap、jquery、t
個人js學習例項-點選按鈕實現全選與反選,及封裝函式呼叫前後
原始: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="wid
基於bootstrap-dialog封裝下拉列表彈出層外掛
引入js檔案 jquery版本1.11.3,bootstrap3.x,第三個檔案為本文封裝的js <script src="/js/jquery-1.11.3.min.js"></script> <script src="
基於Bootstrap框架的臨床資料管理系統的設計與開發
基於Bootstrap框架的臨床資料管理系統的設計與開發 2018年11月10日 目 錄 第一章緒論
基於node.js/jquery/bootstrap的部落格系統開發---總結
1 express Express 是一個基於 Node.js 平臺的極簡、靈活的 web 應用開發框架,它提供一系列強大的特性,幫助你建立各種 Web 和移動裝置應用。 var express = require('express'); var app =
基於retrofit的網路框架的終極封裝(二)-與retrofit的對接與解耦,以及遇到的坑
在上一篇基於retrofit的網路框架的終極封裝(一)中介紹了頂層api的設計.這裡再沿著程式碼走向往裡說. 由於這裡講的是retrofit的封裝性使用,所以一些retrofit基礎性的使用和配置這裡就不講了. 引數怎麼傳遞到retrofit
ABP module-zero +AdminLTE+Bootstrap Table+jQuery許可權管理系統第十四節--後臺工作者HangFire與ABP框架Abp.Hangfire及擴充套件
HangFire與Quartz.NET相比主要是HangFire的內建提供整合化的控制檯,方便後臺檢視及監控,對於大家來說,比較方便。 HangFire是什麼 Hangfire是一個開源框架(.NET任務排程框架),可以幫助您建立,處理和管理您的後臺作業,處理你不希望放入請求處理管道的操作: 通知/通訊;
ABP module-zero +AdminLTE+Bootstrap Table+jQuery許可權管理系統第十七節--Quartz與ABP框架Abp.Quartz及擴充套件
Quartz簡介 Quartz.NET是一個開源的作業排程框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#寫成,可用於winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而建立簡單的或複雜的排程。它有很多特徵,如:資料庫支
ABP module-zero +AdminLTE+Bootstrap Table+jQuery許可權管理系統第十六節--SignalR與ABP框架Abp.Web.SignalR及擴充套件
SignalR簡介 SignalR是什麼? ASP.NET SignalR 是為 ASP.NET 開發人員提供的一個庫,可以簡化開發人員將實時 Web 功能新增到應用程式的過程。實時 Web 功能是指這樣一種功能:當所連線的客戶端變得可用時伺服器程式碼可以立即向其推送內容,而不是讓伺服器等待客戶端請求新的資