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/
一、使用方法
載入 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]] | 驗證電話號碼 |
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]] | 自定義規則驗證
|
ajax | validate[ajax[ajaxName]] | 自定義 ajax 驗證
傳輸方式: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]] | 驗證郵政編碼 |
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偏移值"。如: |
autoPositionUpdate | false | 是否自動調整提示層的位置 |
autoHidePrompt | false | 是否自動隱藏提示資訊 |
autoHideDelay | 100000 | 自動隱藏提示資訊的延遲時間 (ms) |
fadeDuration | 0.3 | 隱藏提示資訊淡出的時間 |
addPromptClass | '' | 給提示資訊增加 class
Ciaoca 增強版中,增加樣式如下: 'formError-noArrow' -- 無箭頭樣式 'formError-text' -- 純文字樣式 'formError-small' -- 精簡版樣式 'formError-white' -- 白色版樣式 可以疊加使用,如: |
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 |
|
data-errormessage-type-mismatch |
|
data-errormessage-pattern-mismatch |
|
data-errormessage-range-underflow |
|
data-errormessage-range-overflow |
|
data-errormessage-custom-error |
|
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:提示資訊 |