1. 程式人生 > >jQuery 表單驗證外掛jQuery Validation Engine用法詳解

jQuery 表單驗證外掛jQuery Validation Engine用法詳解

功能強大的 jQuery 表單驗證外掛,適用於日常的 E-mail、電話號碼、網址等驗證及 Ajax 驗證,除自身擁有豐富的驗證規則外,還可以新增自定義的驗證規則。

jQuery Validation Engine v2.6.2:相容 IE 6+, Chrome, Firefox, Safari, Opera 10+,要求jQuery版本1.7以上。下載地址:http://code.ciaoca.com/jquery/validation-engine/version/jQuery-Validation-Engine-2.6.2.zip。另有Ciaoca 中文增強版:下載地址,http://code.ciaoca.com/jquery/validation-engine/

version/jQuery-Validation-Engine-2.6.2-ciaoca.zip。

一、使用方法

載入 CSS 檔案

<link rel="stylesheet" href="css/validationEngine.jquery.css">

載入 JavaScript 檔案

<script src="js/jquery.js"></script> 
<script src="js/jquery.validationEngine-zh_CN.js"></script> 
<script src="js/jquery.validationEngine.js"
></script>  <!-- jquery.validationEngine-zh_CN.js 為配置檔案,可根據需求自行調整或增加,也可以更換為其他語言配置檔案 --> 

給表單加上 ID

<!-- ID 須設定在 form 標籤中 --> 
<form id="form_id" ...> 
... 
</form> 

給控制元件新增驗證型別

<!-- 
驗證規則預設使用 class 屬性 
validate[required] 表示該項必須填寫 
--> 
<input type="text" class
="validate[required]">  <input type="checkbox" class="validate[required]">  <select class="validate[required]"></select> <!--預設的選項的value須為空--如下-->
<select class="validate[required]"><option value="">請選擇</option></select>
 <textarea class="validate[required]"></textarea>

設定驗證

// 直接呼叫 
$('#form_id').validationEngine(); 
 
// 自定義引數呼叫 
$('#form_id').validationEngine('attach'{ 
  promptPosition: 'centerRight', 
  scroll: false 
}); 

支援鏈式操作

$('#form_id').validationEngine().css({border:'2px solid #000'});

二、驗證型別

注:驗證規則均寫在 validate[] 中,如有多條規則,用英文逗號(,)分割。

例:validate[required,minSize[6],custom[onlyLetterNumber]]

名稱 示例 說明
required validate[required] 表示必填項
groupRequired[string] validate[groupRequired[grp]] 在驗證組為 grp 的群組,中至少輸入或選擇一項
condRequired[string] validate[condRequired[ids]] 當 ids 的某個控制元件不為空時,那麼該控制元件也為必填項。

可以依賴多項,如:validate[condRequired[id1,id2]][Demo]

minSize[int] validate[minSize[6]] 最少輸入字元數
maxSize[int] validate[maxSize[20]] 最多輸入字元數
min[int] validate[min[1]] 最小值(該項為數字的最小值,注意與 minSize 的區分)
max[int] validate[max[9999]] 最大值(該項為數字的最大值,注意與 maxSize 的區分)
minCheckbox[int] validate[minCheckbox[2]] 最少選取的專案數(用於 Checkbox)
maxCheckbox[int] validate[maxCheckbox[2]] 最多選取的專案數(用於 Checkbox)
date[string] validate[custom[date]] 驗證日期,格式為 YYYY/MM/DD、YYYY/M/D、YYYY-MM-DD、YYYY-M-D
dateFormat[string] validate[custom[dateFormat]] 驗證日期格式,格式為 YYYY/MM/DD、YYYY/M/D、YYYY-MM-DD、YYYY-M-D
dateTimeFormat[string] validate[custom[dateTimeFormat]] 驗證日期及時間格式,格式為:YYYY/MM/DD hh:mm:ss AM|PM
dateRange[string] validate[dateRange[grp1]] 驗證 grp1 的值是否符合日期範圍(開始日期與結束日期)

根據控制元件的前後位置,如果當前控制元件在 grp1 元素之後,輸入的日期不能是 grp1 日期的過去。

如果當前控制元件在 grp1 控制元件之前,輸入的日期不能是 grp1 日期的未來。[Demo]

dateTimeRange[string] validate[dateTimeRange[grp1]] 驗證日期及時間範圍,增加了時間的對比,其他的和 dateRange 一樣。
past[string] validate[past[2012/12/20]] 日期必需是 date 或 date 的過去。date 格式可寫作 YYYY/MM/DD、YYYY/M/D、YYYY-MM-DD、YYYY-M-D 或 now
future[string] validate[future[now]] 日期必須是 data 或 date 的未來。date 格式可寫作 YYYY/MM/DD、YYYY/M/D、YYYY-MM-DD、YYYY-M-D 或 now
equals[string] validate[equals[id]] 當前控制元件的值需與控制元件 id 的值相同
number validate[custom[number]] 驗證數字
integer validate[custom[integer]] 驗證整數
phone validate[custom[phone]] 驗證電話號碼
email validate[custom[email]] 驗證 E-mail 地址
url validate[custom[url]] 驗證 url 地址,需以 http://、https:// 或 ftp:// 開頭
ipv4 validate[custom[ipv4]] 驗證 ipv4 地址
onlyNumberSp validate[custom[onlyNumberSp]] 只接受填數字和空格
onlyLetterSp validate[custom[onlyLetterSp]] 只接受填英文字母、單引號(')和空格
onlyLetterNumber validate[custom[onlyLetterNumber]] 只接受數字和英文字母
custom[自定義規則] validate[custom[ruleName]] 自定義規則驗證
'ruleName'{ 
  'regex'RegExp/* 正則表示式,如果正則能匹配內容表示通過 */ 
  'alertText''驗證不通過時的提示資訊' 
}
ajax validate[ajax[ajaxName]] 自定義 ajax 驗證
'ajaxName'{ 
  'url''phpajax/ajaxValidateFieldUser.php'/* 驗證程式地址 */ 
  'extraData''name=eric'/* 額外引數 */ 
  'alertTextOk''驗證通過時的提示資訊', 
  'alertText''驗證不通過時的提示資訊', 
  'alertTextLoad''正在驗證時的提示資訊' 
} 
/* 
 * 例: 
 * <input type="text" id="email" class="validate[ajax[ajaxName]]"> 
 * 假設填寫的值為:[email protected] 
 * extraData 設定為:'type=register&verify=abcd' 
 * 提交到後端的 url 為:phpajax/[email protected]&type=register&verify=abcd 
 */

傳輸方式:get

傳遞引數:"fieldId=" + field.attr("id") + "&fieldValue=" + field.val()

額外引數:extraData 可以設定為字串或物件,會在引數結尾追加 "&extraData"

返回資料格式:json

返回資料內容:[String,Boolean]

第一個值型別為 String,是接收到 fieldId 的值;

第二個值型別為 Boolean,驗證通過返回 true,不通過返回 false

funcCall validate[funcCall[functionName]] 呼叫外部函式驗證

functionName(field, rules, i, options)

Ciaoca 增強版增加驗證規則:

名稱 示例 說明
chinese validate[custom[chinese]] 只接受中文漢字
chinaId validate[custom[chinaId]] 驗證身份證號碼(僅支援 18 位的身份證號碼)
chinaIdLoose validate[custom[chinaIdLoose]] 驗證身份證號碼(支援 15 及 18 位的身份證號碼)
chinaZip validate[custom[chinaZip]] 驗證郵政編碼
qq validate[custom[qq]] 驗證 QQ 號碼

三、引數說明

名稱 預設值 說明
validationEventTrigger 'blur' 觸發驗證的事件,支援事件可參考 jQuery 的事件說明。

PS:如果希望只在表單提交時驗證,可以設定為空。或者設定引數 binded:false

binded true 是否繫結即時驗證
scroll true 螢幕自動滾動到第一個驗證不通過的位置。
focusFirstField true 驗證未通過時,是否給第一個不通過的控制元件獲取焦點。
validateNonVisibleFields false 是否驗證不可見的元素(如 type="hidden" 的輸入框,或多個輸入控制元件在選項卡切換中)
showPrompts true 是否顯示提示資訊
showArrow true 是否顯示提示資訊的箭頭
promptPosition 'topRight'

提示資訊的位置,可設定為:'topRight', 'topLeft', 'bottomRight', 'bottomLeft', 'centerRight', 'centerLeft', 'inline'

可設定更具體的位置,格式為:"方向: X偏移值, Y偏移值"。如:bottomLeft: -20, 5

autoPositionUpdate false 是否自動調整提示層的位置
autoHidePrompt false 是否自動隱藏提示資訊
autoHideDelay 100000 自動隱藏提示資訊的延遲時間 (ms)
fadeDuration 0.3 隱藏提示資訊淡出的時間
addPromptClass '' 給提示資訊增加 class

Ciaoca 增強版中,增加樣式如下:

'formError-noArrow' -- 無箭頭樣式

'formError-text' -- 純文字樣式

'formError-small' -- 精簡版樣式

'formError-white' -- 白色版樣式

可以疊加使用,如:addPromptClass: 'formError-noArrow formError-small'

custom_error_messages {} 自定義錯誤資訊內容 [Demo]
maxErrorsPerField false 單個元素顯示錯誤提示的最大數量,值設為數值。預設 false 表示不限制。
showOneMessage false 是否只顯示一個提示資訊
doNotShowAllErrosOnSubmit false 在提交表單時不顯示所有的錯誤資訊(建議使用引數 showOneMessage 替代)
addSuccessCssClassToField '' 驗證通過時,給控制元件增加 class,當再次驗證失敗時,會去除。
addFailureCssClassToField '' 驗證失敗時,給控制元件增加 class,當再次驗證通過時,會去除。
prettySelect false 是否使用了美化過的 select 選擇控制元件 [Demo]
onFieldSuccess false 控制元件驗證通過時的回撥函式

function(field){}

onFieldFailure false 控制元件驗證失敗時的回撥函式

function(field){}

onSuccess false 在表單驗證結果為通過時的回撥函式
onFailure false 在表單驗證結果為失敗時的回撥函式

PS:onSuccess 和 onFailure 請參考 [Demo]

onValidationComplete false 表單提交驗證完成時的回撥函式 [Demo]

function(form, valid){},引數:

form:表單元素

valid:驗證結果(ture or false)

PS:使用此方法後,表單即使驗證通過也不會進行提交,交給定義的回撥函式進行操作。

ajaxFormValidation false 是否使用 Ajax 提交表單(預設使用 GET 方式傳送資料)
ajaxFormValidationURL false 設定 Ajax 提交的 URL,預設使用 form 的 action 屬性
ajaxFormValidationMethod 'get' 設定 Ajax 提交時,傳送資料的方式
onAjaxFormComplete $.noop 表單提交,Ajax 驗證完成後的行為(Function)[Demo]

function(status, form, json, options){}

onBeforeAjaxFormValidation $.noop 表單提交驗證通過後,Ajax 提交之前的回撥函式 [Demo]

function(form, options){}

ajaxValidCache {}
isError false
InvalidFields []
isOverflown false 表單是否在溢位滾動的元素內(即外部元素設定了 overflow:scroll)

PS:設定為 ture 後,提示內容的插入位置將更改為在驗證的控制元件之前插入;

  此時需要在控制元件外層再套一個元素,並設定 class="inputContainer"

overflownDIV '' 設定了溢位滾動的元素,格式為 jQuery 的選擇器。
usePrefix '' 使用 ID 字首
useSuffix '' 使用 ID 字尾
validateAttribute 'class' 存放驗證規則的屬性
bindMethod 'bind'
inlineAjax false

四、HTML5 屬性

屬性名稱 說明
data-validation-engine

設定驗證規則

除了使用 class 設定驗證規則外,也可以使用該屬性來設定驗證規則。

data-validation-placeholder

佔位符

當位置為必填的控制元件驗證時,值不能為空,也不能為佔位符。

data-prompt-position

自定義提示資訊的位置,可設定為:"topRight", "topLeft", "bottomRight" "bottomLeft", "centerRight", "centerLeft", "inline"

可設定更具體的位置,格式為:"方向:X偏移值,Y偏移值"。如:data-prompt-position="bottomLeft:20,5"

PS:偏移值可以為負數

data-prompt-target

載入提示資訊的容器,值為元素的 id

僅在 promptPosition 或 data-prompt-position 設為 "inline" 是有效。

錯誤資訊屬性(實驗的)

屬性值與驗證規則相對應

<!-- 自定義錯誤資訊屬性(實驗支援) --> 
<input type="email" name="email" id="email" data-validation-engine="validate[required,custom[email]]" 
  data-errormessage-value-missing="E-mail 不能為空"  
  data-errormessage-custom-error="E-mail 格式應為:[email protected]"  
  data-errormessage="通用的錯誤提示資訊"> 
屬性名稱 對應驗證規則
data-errormessage-value-missing
  • required
  • groupRequired
  • condRequired
data-errormessage-type-mismatch
  • past
  • future
  • dateRange
  • dateTimeRange
data-errormessage-pattern-mismatch
  • creditCard
  • equals
data-errormessage-range-underflow
  • minSize
  • min
  • minCheckbox
data-errormessage-range-overflow
  • maxSize
  • max
  • maxCheckbox
data-errormessage-custom-error
  • custom
  • ajax
  • funcCall
data-errormessage 通用的錯誤提示資訊

五、API 介面

名稱 示例 說明
attach $('#form_id').validationEngine('attach'); 繫結表單驗證
detach $('#form_id').validationEngine('detach'); 移除表單驗證
validate alert($('#id').validationEngine('validate')); 驗證控制元件或表單,返回結果 true 或 false
showPrompt $('#id').validationEngine('showPrompt','提示內容','load'); 在該元素上建立一個提示,3 種狀態:'pass', 'error', 'load'
hide $('#id').validationEngine('hide'); 隱藏改元素及元素內的提示
hideAll $('#id').validationEngine('hideAll'); 隱藏頁面上的所有提示
updatePromptsPosition $('#form_id').validationEngine('updatePromptsPosition') 更新提示層的位置

六、自定義事件

外掛增加的自定義事件,可參考 [Demo]

名稱 示例 說明
jqv.form.validating $('#form_id').bind('jqv.form.validating', function(event){}); 表單驗證時
jqv.form.result $('#form_id').bind('jqv.form.result', function(event, errorFound){}); 表單驗證完成。返回引數說明:

errorFound:表單驗證不通過(true 或 false)

jqv.field.result $('#field_id').bind('jqv.field.result', function(event, field, isError, promptText){}); 單個控制元件驗證完成。返回引數說明:

field:控制元件物件

isError:控制元件驗證不通過(true 或 false)

promptText:提示資訊

七、相關資訊