1. 程式人生 > >基於Bootstrap與jQuery-Validate的個人簡易封裝

基於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下載地址:

原創帖,希望轉載時附帶上作者資訊,謝謝。

相關推薦

基於BootstrapjQuery-Validate個人簡易封裝

先看下我運用到實際專案裡面的介面效果: 移動端效果: 基本上來說,採用氣泡式的提示能帶來更好的使用者體驗,而且不會過多的佔用頁面的空間,在風格上與Bootstrap保持了一致,基本上還是採用原生的jQuery-validate的檢驗規則以及自定義規則

TP5 引入bootstrapjquery

bootstrap #下載生產環境的版本 https://v3.bootcss.com/getting-started/#download jquery #生產版本 http://jquery.com/ tp中使用 #將解壓後的bootstrap中js、css、fon

基於bootstrapJQuery中所有checkBox預設選中

js部分 //當頁面載入成功之後,所有checkbox都預設選中 $("#definedColumns input[type='checkbox']").prop("checked",true)

分享幾款基於bootstrapjquery的分頁外掛

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基於jsoncookie實現購物車的方法

構造 exp als com else cookies 一個 可選參數 int /** * 添加商品及數量到購物車cookie中,返回當前商品在cookie中的總數 */ function AddToShoppingCar(id, num, t

Jquery EasyuiJquery Bootstrap的比較

1.easyui是js框架 ;bootstrap 是css框架 ,bootstrap = 樣式庫 + 一堆jQuery外掛,順便解釋一句,如果你只需要bootstrap的樣式,你完全不用引入jQuery和bootstrap的js檔案。 2.通常來看 bootstrap 適合做WEB前端、

原生封裝AjaxjQuery實現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許可權管理系統第十四節--後臺工作者HangFireABP框架Abp.Hangfire及擴充套件

HangFire與Quartz.NET相比主要是HangFire的內建提供整合化的控制檯,方便後臺檢視及監控,對於大家來說,比較方便。 HangFire是什麼 Hangfire是一個開源框架(.NET任務排程框架),可以幫助您建立,處理和管理您的後臺作業,處理你不希望放入請求處理管道的操作: 通知/通訊;

ABP module-zero +AdminLTE+Bootstrap Table+jQuery許可權管理系統第十七節--QuartzABP框架Abp.Quartz及擴充套件

Quartz簡介 Quartz.NET是一個開源的作業排程框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#寫成,可用於winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而建立簡單的或複雜的排程。它有很多特徵,如:資料庫支

ABP module-zero +AdminLTE+Bootstrap Table+jQuery許可權管理系統第十六節--SignalRABP框架Abp.Web.SignalR及擴充套件

SignalR簡介 SignalR是什麼? ASP.NET SignalR 是為 ASP.NET 開發人員提供的一個庫,可以簡化開發人員將實時 Web 功能新增到應用程式的過程。實時 Web 功能是指這樣一種功能:當所連線的客戶端變得可用時伺服器程式碼可以立即向其推送內容,而不是讓伺服器等待客戶端請求新的資