1. 要驗證一個表單,只須要給字段綁定規則「data-rule
」就能夠了
2. 字段能夠有多條規則,規則之間用分號(;)分隔
3. js初始化不是必要的,只要是字段而且帶有「data-rule」屬性,即便是新插入的一段DOM也能夠立馬驗證
4. 其中:required是內置規則(核心自帶),username、password是配置文件中設置的全局規則(配置文件)
1. 若是你願意的話,也能夠「DOM傳參」 和 「js調用」混搭,js傳遞的規則優先級最高
1. 在規則字符串的最前面加上該字段的名字,而且跟上一個冒號(:),例以下面的「用戶名:」, 參見 公共定義
2. 若是是js調用也是同樣的
3. 下面的例子同時在form上綁定了參數
規則:range[limits];
limits(範圍)表示方式: ~100 (小於100),0~100 (0到100),100~ (大於100)
1. 對於checkbox和radio,要「必填」的話,不能使用「required
」,而是使用「checked
」
2. 你只須要在第一個checkbox或者radio上面綁定規則就能夠了
3. 消息會自動生成,而且顯示在最後面,你無需關注消息怎麼顯示
在第一個checkbox上綁定規則:
checked
1.checked[2~]
表示選擇的項目要在2項以上
2. 不要對:radio
使用參數,由於自己就是單選,直接checked
就能夠了
1. 能夠經過valid
參數傳入回調,參見 配置
2. 也能夠直接接收valid.form
事件(下面例子採用接收事件的方式),參見 事件
一、使用豎線(|)分隔的多個規則,只要其中一個驗證經過,就算經過
二、連續的規則或,只須要給最後一條規則設置錯誤消息
三、在規則名前面加上邏輯非(!),便可反轉規則的驗證效果
四、規則非,不能使用本來規則的消息,只能從新定義
規則:match[name];
規則:match[limits, name];
limits可用值:eq (相同), lt (小於),gt (大於),lte (小於等於),gte (大於等於)
這種模式下,兩個字段的值都會轉換爲數字進行比較
規則:match[limits, name, date];
limits可用值:eq (相同), lt (小於),gt (大於),lte (小於等於),gte (大於等於)
第三個參數date
或time
表明要比較的類型
規則:length[limits];
limits(範圍)表示方式: ~100 (小於100),0~100 (0到100),100~ (大於100)
規則:length[limits, true];
limits(範圍)表示方式同上
a. 使用規則:
remote([get:]url [, name1, [name2]...]);
正則表達式b. url前面的
get:
是可選的,加上此參數,將改變ajax方式爲GETjsonc. 從第二個參數起,可選傳入字段的name,用於附帶額外請求參數
d. 智能適配服務器返回的3種數據格式,對於json格式(2和3)只須要包含所需數據就適配:
1. '' => 成功, '錯誤消息' => 失敗
2. {"ok":""} => 成功,{"ok":"名字很棒!"} => 成功, {"error":"錯誤消息"} => 失敗
3. {"data":{"ok":""}} => 成功,{"data":{"ok":"名字很棒!"}} => 成功, {"data":{"error":"錯誤消息"}} => 失敗
1. 傳遞的name值須要是表單中已經存在的
2. 能夠傳遞無限個參數
3. 每一個參數之間用英文逗號(,)分隔,逗號後面的空格是必須的
1. 若是內置的remote規則不能知足你的需求,能夠 自定義規則 ,將$.ajax()返回出來
2. 提交表單的時機是在表單驗證經過後,這裏演示了valid回調會在表單驗證經過後才被調用
1. 直接過濾輸入,不提示錯誤
2. 默認過濾尖括號(<>),你能夠經過傳入字符(支持正則),改變過濾規則
例如:filter(`%<>\/)
,將過濾:`%<>/
1. 大多數表單驗證均可以經過DOM方式傳參
2. 作好全局配置(zh_CN.js),能夠大大減小工做量
3. 若是你不放心DOM自動初始化,也能夠在js中一行代碼初始化一遍$('#form').validator();
, 更換主題,而後看看下面的提示消息有什麼變化?
1. 無需侵入HTML結構,全js調用
2. 你還能夠自由控制消息的位置,只要設置msgStyle
參數就能夠了,例如:"margin-left:10px;margin-top:5px;"
3. 所謂主題,是經過配置表單的class、消息模板以及其餘一些參數實現的不一樣展示效果
4. 全部參數(除了rules和messages), 均可以用來配置主題; 主題名字能夠隨意定義
5. 主題配置能夠覆蓋全局配置,同時也會被調用時的傳參覆蓋
DOM傳參:data-rule-ruleName="[RegExp, 'ErrorMessage']"
其中ruleName是規則名字,能夠隨便定義,只要調用規則時保持一致就能夠
JS傳參:ruleName: [RegExp, 'ErrorMessage']
實際上跟DOM傳參是同樣的
JS傳參:ruleName: function(element, param, field) {}
@param element 當前驗證的DOM元素
@param param 規則傳遞的參數
@param field 當前字段元數據
如下是可返回的數據:
return undefined(等同於無return) => √經過
return true => √經過
return false => ×不經過
return "String" => ×不經過,而且認爲這個字符串是錯誤消息
return {"ok": "正確提示"} => √經過,而且提示這個ok的消息
return {"error": "錯誤消息"} => ×不經過,而且提示這個error的消息
return $.ajax(),ajax驗證 => 等待驗證結果(注:ajax返回的數據格式參見remote的示例)
return null => 忽略本次驗證(跳過該字段的驗證,若是已經顯示了消息將會自動隱藏)
自定義規則方法中的this老是指向當前驗證的實例,因此在內部能夠直接調用實例方法(參見: 方法)
注意:下面例子loginName規則中,第一個test是正則表達式的方法,後面兩個this.test
是調用了驗證的 test方法
1. 若是內置的 remote規則不能知足你的需求,能夠 自定義規則 ,將$.ajax()返回出來
2. 提交表單的時機是在表單驗證經過後,這裏演示了valid回調會在表單驗證經過後才被調用
required(condition),只有知足condition規則,才驗證required
DOM傳參:data-target="jQuery選擇器"
若是「jQuery選擇器」選擇的DOM是輸入框,該輸入框將成爲消息位置的代理
不然消息直接顯示在「jQuery選擇器」選擇的DOM內部
下面的例子中,實際驗證和提交的是「pid」字段,不要在乎乎表象^_^
<span class="msg-box" for="inputID"></span>
inputID對應input的id(若是input有id)或者input的name
把這段DOM放到哪一個位置,消息就顯示在哪兒,還能夠經過給這個span寫style內聯樣式,控制更精準的位置
注意:
消息佔位的標籤由msgWrapper參數(默認爲span)決定,若是設置了msgWrapper: label,那麼這裏的標籤也要用label
一、設置 msgMaker 參數爲false,就不會再自動生成消息
二、使用 invalid 回調的第二個參數 errors
注意:
此功能在0.5.0+版本按如下方式支持,以前版本的msgHandler參數已被移除
不論是高亮錯誤,仍是高亮錯誤區域,都須要本身定義CSS(不肯定的樣式須要你本身來實現)
1. 字段驗證失敗後,該輸入框會自動添加一個class(n-invalid
),字段驗證經過後又會自動移除這個class
2. 能夠自定義這個class的樣式,實現高亮輸入框
1 |
#demo_121 .n-invalid {
border: 1
px solid
#f00;}
|
1. 原理是經過invalid.field
事件,找到父節點添加一個class
2. 須要表單結構的配合,具體要看你表單的結構是什麼樣子來靈活使用
12 |
#demo_122 .form-item {
padding:5
px;
margin:2
px 0;}
#demo_122 .form-item-error {
background:
#FDE2E9;}
|
和例2大同小異,只不過加了幾個參數
12 |
#demo_123 .form-item {
padding:5
px;
margin:2
px 0;}
#demo_123 .form-item-error {
background:
#FDE2E9;}
|
參見:文檔 > 參數配置 > groups
組合驗證有多種用途:
1. 當多個字段中,只要填寫部分字段就經過的狀況
2. 若是多個字段有關聯性的時候,例如:每驗證其中一個字段就須要作一下處理
這種狀況,既能夠js傳參,也能夠DOM傳參
下面例子的兩個字段,分別使用了js傳參和DOM傳參
這種狀況只能經過js傳參,由於DOM傳參會優先使用name做爲標識
若是多個字段name相同,而且要分別顯示消息,就要爲他們設置不一樣的id
<div id="result" class="tip-ok" style="display:none">提交成功</div> <form id="signup_form" class="signup" autocomplete="off"> <fieldset> <div class="form-item"> <div class="field-name">全名</div> <div class="field-input"> <input type="text" name="user[name]" maxlength="20" autocomplete="off"> </div> </div> <div class="form-item"> <div class="field-name">電子郵件地址</div> <div class="field-input"> <input type="text" name="user[email]" autocomplete="off"> </div> </div> <div class="form-item"> <div class="field-name">建立密碼</div> <div class="field-input"> <input type="password" name="user[user_password]"> </div> </div> <div class="form-item"> <div class="field-name">選擇你的用戶名</div> <div class="field-input"> <input type="text" name="user[screen_name]" maxlength="15" autocomplete="off"> </div> </div> </fieldset> <button id="btn-submit" class="btn-submit" type="submit">建立個人帳號</button> </form> //驗證初始化 $('#signup_form').validator({ stopOnError:true, timely: 2, //自定義規則(PS:建議儘可能在全局配置中定義規則,統一管理) rules: { username: [/^[a-zA-Z0-9]+$/, '用戶名無效! 僅支持字母與數字。'] }, fields: { "user[name]": { rule: "required", tip: "輸入你的名字與姓氏。", ok: "名字很棒。", msg: {required: "全名必填!"} }, "user[email]": { rule: "email;remote[check/email.php]", tip: "你的郵件地址是什麼?", ok: "咱們將會給你發送確認郵件。", msg: { required: "電子郵箱地址必填!", email: "不像是有效的電子郵箱。" } }, "user[user_password]": { rule: "required;length[6~];password;strength", tip: "6個或更多字符! 要複雜些。", ok: "", msg: { required: "密碼不能爲空!", length: "密碼最少爲6位。" } }, "user[screen_name]": { rule: "required;username;remote[check/user.php]", tip: "別擔憂,你能夠稍後進行修改。", ok: "用戶名可使用。<br>你能夠稍後進行修改。", msg: {required: "用戶名必填!<br>你能夠稍後進行修改。"} } }, //驗證成功 valid: function(form) { $.ajax({ url: 'results.php', type: 'POST', data: $(form).serialize(), success: function(d){ $('#result').fadeIn(300).delay(2000).fadeOut(500); } }); }, //驗證失敗 invalid: function(form) { //按鈕動畫效果 $('#btn-submit').stop().delay(100) .animate({left:-5}, 100) .animate({left:5}, 100) .animate({left:-4}, 100) .animate({left:4}, 100) .animate({left:-3}, 100) .animate({left:0}, 100); } });
------------------------------------------------------------------------------
使用方式(Usage)
僅做爲入門指引,詳細瞭解建議查看公共定義以及配置說明
第一步、引入資源
使用以前,確保已經引入了jQuery,須要 1.7 以上版本。
<script type="text/javascript" src="path/to/jquery-1.7.2.min.js"></script>
而後引入驗證插件,其中「zh_CN.js」 是本地化配置文件,你能夠在裏面配置一些全局的參數(規則、主題、多語言消息)。
<link rel="stylesheet" href="path/to/validator/jquery.validator.css">
<script type="text/javascript" src="path/to/validator/jquery.validator.js"></script>
<script type="text/javascript" src="path/to/validator/local/zh_CN.js"></script>
第二步、使用組件
兩種方式(js傳參 和 DOM傳參),均可以實現表單驗證:
經過JS傳參,無需改變DOM。
@example
<form name="register">
<label>郵箱</label><input name="email">
</form>
$('form[name="register"]').validator({
stopOnError: false,
timely: false,
fields: {
'email': 'required;email;'
}
});
經過在DOM上綁定屬性,無需js調用。
a. 在字段上綁定規則,參見公共定義-規則
b. 若是要改變默認參數,能夠在form上以json字符串形式綁定參數data-validator-option,參見公共定義-表單
c. 若是參數所有在DOM元素上面傳遞,那麼js就不須要初始化了
@example
<form name="register" data-validator-option="{stopOnError:false, timely:false}">
<label>郵箱</label><input name="email" data-rule="required;email;">
</form>
沒理解?先看看示例,再來研究文檔吧!
公共定義(Common)
幫助你理解nice Validator的驗證方式
規則(rule)
"display: rule1; rule2; ... rulen;"
1. 前面的display:是可選的,用於替換錯誤消息中顯示的字段名。
2. 後面的 rule1 ~ rulen 表明規則,規則之間須要使用分號(;)分隔,最後一個規則後面的分號可選
3. 冒號(:)或者分號(;)後面能夠有空格
@example:
例如required規則的默認消息模板爲:{0}不能爲空
data-rule="required; username;" //required規則驗證失敗後,將提示:"不能爲空"
data-rule="用戶名: required; username;" //required規則驗證失敗後,將提示:"用戶名不能爲空
a. 每條規則之間用分號(;)分隔,分號後能夠有空格,不限規則數量,規則越靠前越先被驗證
b. 若是一條規則被定義爲能夠傳參數,那麼全部參數須要使用圓括號(())或者方括號([])括起來;
c. 若是有多個參數,那麼每一個參數之間須要使用「逗號+空格」隔開
DOM上綁定規則,使用data-rule-* = "[RegExp, 'errorMessage']"
@example:
<input name="demo" data-rule="required; xxx" data-rule-xxx="[/^\d{6}$/, '請輸入6位數字']">
該例子定義了名字爲「xxx」的規則,使用了正則表達式,且附帶了錯誤消息,若是xxx驗證失敗將提示「請輸入6位數字」。 實際上,你甚至能夠覆蓋內置或者全局的規則,例如required
js調用時傳遞規則,使用rules參數,這和在HTMl結構中定義規則是同樣效果
@example:
<form id="yourForm">
<input name="demo">
</form>
$("#yourForm").validator({
rules: {
xxx: [/^\d{6}$/, '請輸入6位數字']
},
fields: {
demo: "required; xxx"
}
});
字段(field)
字段是表單的基本構成。驗證組件收集配置信息時也會以字段爲單位
DOM傳參支持的屬性
a. 若是要使一個字段被驗證,data-rule參數是必不可少的,其餘參數均可選
b. 支持的屬性:data-rule、data-rule-*、data-msg-*、data-tip、data-ok、data-target、novalidate、notimely
@example:
1<form id="yourForm">
<input type="password" name="demo"
data-rule="required; password"
data-rule-password="[/^\d{6}$/, '請填寫6位數字']"
data-msg-required="請填寫密碼"
data-tip="密碼由6位數字組成"
data-ok="別擔憂,稍後您還能夠更改"
data-target="#msg_holder"
>
</form>
上面例子中:
data-rule 定義該字段的規則集
data-rule-password 定義了一條臨時規則(在data-rule中已經使用了)
data-msg-required 更改了默認required的消息;
data-tip 參數使得元素得到焦點時,顯示友好的信息;
data-ok 定義的消息,將在字段驗證成功後顯示;
data-target 若是定義,將決定消息最終顯示位置。若是「#msg_holder」是字段(如input、select、textarea),消息的顯示位置將轉爲該字段的消息位置,若是是帶有「.msg-box」類的DOM,將顯示在該DOM內;
另外兩個特殊屬性,不須要帶值:
novalidate 不要驗證該字段,動態添加和移除該屬性可使該字段在合適的時候驗證
notimely 不要實時驗證該字段,動態添加和移除該屬性可使該字段在合適的時候驗證
使用JS傳參方式
@example:
<form id="yourForm">
<input type="password" name="demo">
</form>
11111$("#yourForm").validator({
rules: {
xxx: [/^\d{6}$/, '請輸入6位數字']
},
fields: {
demo: {
rule: "required; xxx",
msg: {required: "請填寫密碼"},
tip: "密碼由6位數字組成",
ok: "別擔憂,稍後您還能夠更改",
target: "#msg_holder"
}
}
});
表單(form)
表單也能夠接收參數
@example:
<form id="yourForm" data-validator-option="{stopOnError:false, timely:false}">
<input type="password" name="password" data-rule="required;password">
</form>
data-validator-option 接收和js配置同樣的json字符串
novalidate 指示暫時不要初始化該表單的驗證,動態移除後,初始化仍是會執行
配置說明(options)
debug {Number | Boolean}
默認: 是否啓用調試模式,可用值:
0 || false: 關閉調試信息
1 || true: 啓用調試信息
2: 啓用調試信息,而且不論表單是否驗證成功都提交表單,便於對比後端的驗證
timely {Number | Boolean}
默認: 是否啓用實時驗證,可用值:
0 || false: 關閉實時驗證,將只在提交表單的時候進行驗證
1 || true: 啓用實時驗證,在字段失去焦點後驗證該字段
2: 啓用實時驗證,在輸入的同時驗證該字段
theme {String}
默認: 'default'
主題名字,用於設置一個表單驗證的主題樣式。zh_CN.js中配置了幾個主題,能夠做爲參考
stopOnError {Boolean}
默認: false
是否在驗證出錯時中止繼續驗證,默認不中止
focusInvalid {Boolean}v0.7.0+
默認: true
是否自動讓第一個出錯的輸入框得到的焦點,默認得到
focusCleanup {Boolean}v0.7.0+
默認: false
是否在輸入框得到焦點的時候清除消息,默認不清除
ignore {jqSelector}
指定須要忽略驗證的元素的jQuery選擇器,Example:
111//任何不可見的元素,都不做驗證
$('form').validator({
ignore: ':hidden'
});
//id爲tab2下的全部子元素都不做驗證
$('form').validator({
ignore: '#tab2'
});
//動態改變要忽略驗證的元素
$('form').data('validator').options.ignore = '#tab1';
rules {Object}
自定義用於當前實例的規則,支持兩種定義方式。Example:
11111$('form').validator({
rules: {
//自定義驗證函數,具備最大的靈活性,沒有什麼不能驗證
myRule: function(el, param, field){
//do something...
},
//簡單配置正則及錯誤消息,及其方便
another: [/^\w*$/, '請輸入字母或下劃線']
},
fields: {
//調用前面定義的兩個規則
foo: 'required; myRule[param]; another'
}
});
messages {Object}
自定義用於當前實例的規則消息,Example:
$('form').validator({
messages: {
required: "請填寫該字段",
email: "請檢查郵箱格式",
},
fields: {
'email': 'required;email;'
}
});
fields {Object}
待驗證的字段集合,鍵爲字段的name值或者"#"+字段id。有兩種用法:
快捷字符串傳參:"name": "display: rule1;rule2;...rulen",其中「display:」可選,用於替換錯誤消息的字段名字
對象傳參:
111111111fields: {
//name字段使用了全部支持的參數
name: {
rule: "姓名: required; rule2; rule3",
msg: {
required: "請填寫姓名",
rule2: "xxxx",
rule3: "xxxx"
},
tip: "填寫真實姓名有助於朋友找到你",
ok: "",
timely: false,
target: "#msg_holder"
},
//email和mobile字段用最簡單的方式傳遞字段規則
email: "required; email",
mobile: "mobile"
}
fields[name].rule {String}
字段的驗證規則,多個規則用分號(;)分隔,支持使用方括號([ ])或者圓括號(( ))傳參。查看內置規則
fields[name].msg {Object}
自定義字段中每一個規則的錯誤消息
fields[name].tip {String}
自定義得到焦點時的友好提示信息
fields[name].ok {String}
自定義字段驗證成功後顯示的消息
fields[name].msgWrapper {String}
自定義該字段的消息容器的標籤名
fields[name].msgMaker {Function}
自定義該字段的消息生成器
fields[name].msgClass {String}
自定義該字段的消息Class
fields[name].msgStyle {String}
自定義該字段的消息CSS樣式
fields[name].dataFilter {Function}
使用dataFilter回調能夠轉換ajax返回的結果爲niceValidator支持的格式
fields[name].valid {Function}
字段驗證經過的回調
fields[name].invalid {Function}
字段驗證失敗的回調
fields[name].must {Boolean}
是否強制驗證該字段
fields[name].timely {Boolean}
是否啓用實時驗證,默認值繼承自options的timely參數
fields[name].target {jqSelector}
驗證當前字段,可是實際上在target的元素上提示錯誤消息,
若是目標元素是輸入框(input,textarea、select),將會以目標元素爲基準點,插入一條消息;
若是目標元素是消息佔位(className爲msg-box),這和直接使用消息佔位沒有區別
其餘狀況下,直接顯示在target指向的容器中
groups {Array}v0.2.1+
組合多個字段,驗證其中的每個字段都會首先觸發callback回調。Example:
11111$('form').validator({
groups: [{
fields: 'field1 field2 field3',
callback: function($elements){
//do something
},
target: '#msg_holder'
}],
fields: {
field1: 'tel',
field2: 'mobile',
field3: 'email'
}
});
beforeSubmit(form){Function} v0.5.0+
提交表單以前的回調,有一個參數:當前表單對象,若是在beforeSubmit內部返回false,將認爲是取消本次提交
dataFilter(data){Function} v0.6.0+
使用dataFilter回調能夠轉換ajax返回的結果爲niceValidator支持的格式
valid(form){Function}
表單驗證成功後的回調,有一個參數:當前表單對象,支持事件綁定
invalid(form, errors){Function}
@param: {Element} form 表單DOM
@param: {Array} errors 錯誤消息數組
表單驗證失敗後的回調,支持事件綁定
如下配置與主題相關(通常在setTheme()中使用,或者全局配置)
defaultMsg{String}
默認: "{0} is not valid."
默認的錯誤消息,通常在全局配置裏面配置一下就能夠了
loadingMsg{String}
默認: "Validating..."
異步加載中的提示,通常在全局配置裏面配置一下就能夠了
showOk{Boolean | String}
默認: true
是否顯示成功提示(注意:前提是有傳ok的消息),若是設置成false在字段驗證經過後將只是簡單的隱藏消息。
還有另外一種用法:若是傳遞一個字符串,在驗證經過後將提示這個消息,若是設置成空字符串,將只顯示一個成功的圖標
11//字段驗證經過後提示「正確」
$('form').validator({
showOk: "正確"
});
//對於simple_right主題,驗證經過後默認不會提示,只是單純的隱藏錯誤消息
//加上 showOk: "" 這個配置後,將顯示一個經過的圖標
$('form').validator({
theme: "simple_right",
showOk: ""
});
validClass{String}v0.7.0+
默認: "n-valid"
字段驗證經過後自動給輸入框添加的class名。
invalidClass{String}v0.7.0+
默認: "n-invalid"
字段驗證失敗後自動給輸入框添加的class名。
formClass{String}
默認: ""
給表單額外添加的class名,用於自定義主題。這個class就是一個主題的樣式命名空間
msgClass{String}
默認: ""
給消息額外添加的class名,用於自定義主題,控制消息樣式。msgClass建議使用如下4個class之一,驗證組件可以根據方向關鍵字智能識別並控制消息的顯示位置,你也能夠在這4個class的基礎上再加上本身定義的class名,用空格隔開就能夠了
msgClass: "n-top" //消息將自動顯示在輸入框上邊
msgClass: "n-right" //消息將自動顯示在輸入框右邊
msgClass: "n-bottom" //消息將自動顯示在輸入框下邊
msgClass: "n-left" //消息將自動顯示在輸入框左邊
msgClass: "n-right myclass" //消息將自動顯示在輸入框右邊,你還能夠經過myclass來定義更多樣式
msgStyle{String}
默認: ""
有時候主題定義的消息樣式的位置沒有達到預期,就能夠經過msgStyle參數傳遞css規則來精確控制消息位置
$('form').validator({
theme: "simple_right",
msgStyle: "margin-left:-10px; margin-top:10px;",
fields: {
'email': 'required;email;'
}
});
msgWrapper{String} v0.5.0+
默認: "span"
消息容器的標籤名,多用於自定義主題
msgMaker{Function} v0.5.0+
默認: 內置消息構造器
消息構造器,能夠用來自定義消息的結構
以下代碼:
1$('#form').validator({
fields: {
'user[name]': 'required;username'
,'user[pwd]': 'required;password'
},
msgWrapper: 'div',
msgMaker: function(opt){
return '<span class="'+ opt.type +'">' + opt.msg + '</span>';
}
});
最後自動生成的消息爲:
<div class="msg-box n-right" for="user[name]">
<span class="n-error">不能爲空</span>
</div>
msgIcon{String}
默認: "<span class="n-icon"></span>"
icon圖標模板,用於自定義主題,參見local文件夾下的配置文件
msgArrow{String}
默認: ""
小箭頭模板,用於自定義主題,參見local文件夾下的配置文件
msgShow{Function}
默認: null
消息顯示以前的回調,可用於自定義消息動畫。有兩個參數:當前消息的jQuery對象和消息類型。參見local文件夾下的配置文件
msgHide{Function}
默認: null
消息隱藏以前的回調,可用於自定義消息動畫。有兩個參數:當前消息的jQuery對象和消息類型。參見local文件夾下的配置文件
內置規則(rules)
公共定義:
1. 數值範圍使用波浪線(~)表示,例如:6~(大於等於6)、~6(小於等於6)、6~16(6到16)
2. 大小比較使用 lt(小於)、lte(小於等於)、gt(大於)、gte(大於等於)、eq(等於)表示
3. 若是某個規則能夠帶參數,參數要使用方括號([])或者圓括號(())括起來,取決於你的習慣
規則 參數 描述 例子
required 必填項
required //不能爲空
required(xxx) //知足xxx規則,才驗證required
required(not, xxx) //若是值爲空,或者xxx也認爲是空
integer 可選,標識 整數
integer //請輸入整數
integer[*] //請輸入整數
integer[+] //請輸入正整數
integer[+0] //請輸入正整數或integer[-] //請輸入負整數
integer[-0] //請輸入負整數或match 可選,標識
必選, 另外一字段名 與另外一字段匹配,兩種用法:
match[name];
用於驗證兩個字段的值必須相同
match[condition, name];
用於比較兩個字段大小
match[password] //與password字段的值匹配
match[lt,money] //小於money字段的值
match[lte,money] //小於等於money字段的值
match[eq,money] //等於money字段的值匹配
match[gte,money] //大於等於money字段的值
match[gt,money] //大於money字段的值
range 必選,範圍值 數值範圍
range[0~99] //0到99的整數
range[~99] //小於或等於99的整數
range[0~] //大於或等於0的整數
length 必選,範圍值
可選,是否計算真實長度 驗證字符長度
length[6~16] //6-16個字符
length[6] //6個字符
length[~6] //小於6個字符
length[6~] //大於6個字符
length[~6, true] //小於6個字符,全角字符計算雙字符
checked 可選,範圍值 對於checkbox或radio
必需要選中多少項
checked //必填,至關於required
checked[3~5] //請選擇3到5項
checked[3] //請選擇3項
checked[~5] //請選擇少於5項
checked[3~] //請選擇大於3項
remote 必選,url地址
可選,附帶額外的字段 遠程驗證
remote[path/to/server.php]
remote[path/to/server.php, name1, name2, ..]
方法(Methods)
1. 如下API描述中,使用 $form 代替form元素的jQuery對象,具體根據您的實際應用場景來決定
2. 全部使用 validator() 代理調用的方法,其返回值都是jQuery包裝對象,能夠繼續鏈式調用
$form.validator( options )
根據傳入的options,初始化表單驗證
@param: {Object} options 配置參數
@return: {jqObject} $form
@example:
$('form').validator({
//自定義用於當前實例的規則
rules: {
username: function(element, params){
//內部的this指向的是當前實例,能夠直接調用全部方法,這裏調用了test方法
return this.test(element, 'email') || this.test(element, 'mobile') ||
'用戶名能夠輸入郵箱或者手機號';
}
},
//自定義用於當前實例的消息
messages: {
required: "請填寫{0}",
email: "郵箱地址不合法"
},
//待驗證字段集合
fields: {
username: 'required; username;',
password: 'required; length[6~16]',
email: 'email;'
},
valid: function(form){
//表單驗證經過,提交表單到服務器
$.ajax({
url: "result.php",
data: $(form).serialize(),
success: function(d){
//do something
}
});
}
});
$form.validator( validCallback ) v0.3.0+
初始化表單驗證,在表單驗證經過後執行validCallback回調
@param: {Function} validCallback 表單驗證經過後的回調
@return: {jqObject} $form
@example:
//初始化驗證,而且傳入驗證成功的回調
$('form').validator(function(form){
$(form).ajaxSubmit({
//some options
});
});
instance = $form.data( "validator" )
獲取表單驗證的實例
@base: 驗證已經初始化
@return: {Object} 實例(instance)
@example:
//初始化驗證,而且引用驗證的實例
var v = $('form').validator().data('validator');
//使用實例的showMsg方法
v.showMsg('#mobile', '請填寫手機號');
$input.isValid( callback ) v0.3.0+
判斷某個字段是否驗證經過($input表明表單元素的jQuery對象)
@base: 驗證已經初始化
@param: {Function} callback 傳入的回調
@return: {Boolean} 注意,若是有ajax的異步驗證,返回值老是undefined
@example:
11//若是字段上面沒有ajax驗證,你能夠像下面這樣直接判斷
if ( $('#mobile').isValid() ) {
// do something
}
//不然只能經過回調方式獲取驗證結果(用上面的方式將老是返回undefined)
$('#mobile').isValid(function(v){
if (v) {
// do something
}
});
$elements.isValid( callback ) v0.3.0+
判斷某個區域是否驗證經過($elements表明一個區域的jQuery對象)
@base: 驗證已經初始化
@param: {Function} callback 傳入的回調
@return: {Boolean} 注意,若是有ajax的異步驗證,返回值老是undefined
@example:
//檢測表單是否全部字段都驗證經過
$('#formId').isValid(function(v){
console.log(v ? '表單驗證經過' : '表單驗證不經過');
});
instance.isFormValid() v0.7.0+
判斷當前表單是否驗證經過
注意:由於該方法有返回布爾值,因此只能經過實例的方式調用
@base: 驗證已經初始化
@return: {Boolean} 當肯定驗證結果的時候,返回true或者false,當不肯定的時候返回undefined
instance.cleanUp() v0.7.0+
或者 $form.validator( "cleanUp" )
調用該方法後,會清除表單中已經顯示的驗證消息
@base: 驗證已經初始化
instance.destroy()
或者 $form.validator( "destroy" )
銷燬表單驗證,包括事件和實例
@base: 驗證已經初始化
instance.holdSubmit( hold ) v0.4.0+
或者 $form.validator( "holdSubmit", hold )
用來禁止或者釋放submit事件的驗證和提交。
注意:若是你hold住了表單後一直不釋放hold,這個表單就等於只能提交一次
@base: 驗證已經初始化
@param: {Boolean} hold 是否控制住submit事件,默認true(不傳參)
@example:
$("#myForm").validator({
valid: function(form){
var me = this;
// 提交表單以前,hold住表單,防止重複提交
me.holdSubmit();
$.ajax({
url: "xxx.php",
data: $(form).serialize(),
type: "POST",
success: function(){
// 提交表單成功後,釋放hold,若是不釋放hold,就變成了只能提交一次的表單
me.holdSubmit(false);
}
});
}
});
hold參數爲true或者不傳,表示要hold住,還能夠爲回調函數,也是要hold住,只不過在每次被hold住的時候都會執行該回調
$("#myForm").validator({
valid: function(form){
var me = this;
// 提交表單以前,hold住表單,而且在之後每次hold住時執行回調
me.holdSubmit(function(){
alert("正在處理中...");
});
$.ajax({
url: "xxx.php",
data: $(form).serialize(),
type: "POST",
success: function(){
// 提交表單成功後,釋放hold,就能夠再次提交
me.holdSubmit(false);
}
});
}
});
instance.test( element, ruleName )
測試某個元素是否符合某個規則,參數 ruleName 能夠帶參數,例如:this.test(element, "range[0~100]")
注意:
一、由於該方法有返回布爾值,因此只能經過實例的方式調用
二、該方法沒法測試remote規則,以及其餘異步驗證的規則。
@base: 驗證已經初始化
@param: {Element} element 字段元素
@param: {String} ruleName 規則名字
@return: {Boolean}
1111111$("#myForm").validator({
rules: {
// 自定義規則:符合用戶名、手機號或者郵箱規則都算經過
// 注意:第一個test是正則的方法,後面兩個是this.test()是當前實例的方法
loginName: function(element) {
return /^[a-zA-Z]\w{3,}/.test(element.value)
|| this.test(element, "mobile")===true
|| this.test(element, "email")===true
|| '請填寫用戶名、手機號或者郵箱';
}
},
fields: {
"loginName": "required; loginName",
"password": "required; password"
}
});
instance.mapMsg( obj )
或者 $form.validator( "mapMsg", obj )
用來顯示服務器的驗證消息。(提交表單而且服務器驗證完畢後,返回一個name爲鍵、msg爲value的json傳入此方法中)
@base: 驗證已經初始化
@param: {Object} obj name爲鍵、msg爲值的對象
@example:
$('form').validator('mapMsg', {
username: '用戶名已被使用',
password: '密碼太弱了'
});
instance.showMsg( element, obj )
或者 $form.validator( "showMsg", element, obj )
在一個字段元素上顯示一條消息
@base: 驗證已經初始化
@param: {Element} element 要顯示消息的元素,能夠是jQuery選擇器
@param: {Object} obj 消息的參數
@example:
//給id爲「mobile」的元素顯示一條錯誤消息
$('form').validator('showMsg', '#mobile', {
type: "error",
msg: "手機號已存在"
});
instance.hideMsg( element, obj )
或者 $form.validator( "hideMsg", element, obj )
隱藏一個字段元素上的消息
@base: 驗證已經初始化
@param: {Element} element 要顯示消息的元素,能夠是jQuery選擇器
@param: {Object} obj 消息的參數,可選
@example:
//隱藏id爲「mobile」的的元素的消息
$('form').validator('hideMsg', '#mobile');
instance.setMsg( obj )
或者 $form.validator( "setMsg", obj )
自定義消息,可用來動態改變某個表單驗證的消息(優先於內置、全局、傳參的消息)
@base: 驗證已經初始化
@param: {Object} obj rule名爲鍵、msg爲值的對象
@example:
//動態更改當前實例的錯誤消息
$('form').validator('setMsg', {
username: '用戶名已被使用',
password: '密碼太弱了'
});
instance.setRule( obj )
或者 $form.validator( "setRule", obj )
自定義規則,可用來動態改變某個表單驗證的規則(優先於內置、全局、傳參的規則)
@base: 驗證已經初始化
@param: {Object} obj rule名爲鍵、msg爲值的對象
@example: 如下示例展示了兩種定義規則的方式
//動態更改當前實例的規則
$('form').validator('setRule', {
username: [/^\w{3,12}$/, "請輸入3-12位數字、字母、下劃線"],
password: function(element, params, field){
//do something...
//If verification returns true, otherwise it returns an error message
}
});
instance.setField( key, field )
或者 $form.validator( "setField", key, field )
更新一個字段信息.
若是是新字段就等於添加了一個字段;
若是field===null,而且實例中存在字段key,則會刪除字段key(不驗證key字段)
@base: 驗證已經初始化
@param: {String} key 字段名
@param: {String | Object} field 字段信息
@example:
//動態更改字段name爲「username」的驗證規則
$('form').validator("setField", "username", "用戶名:required;username;");
instance.setField( fields )
或者 $form.validator( "setField", fields )
批量更新字段信息.
若是是新字段就等於添加了一個字段;
若是某個字段的值爲null,而且實例中存在該字段,則會刪除該字段(不驗證該字段)
@base: 驗證已經初始化
@param: {Object} fields 字段信息,參見options中fields的配置
@example:
//批量更改字段的驗證規則
$('form').validator('setField', {
foo: null, //將再也不驗證foo字段
bar: 'required' //更改bar字段的驗證規則
});
$.validator.config( options )
全局配置接口,參見配置參數,以及local文件夾下的配置文件
$.validator.setTheme( options )
設置驗證的主題,參見local文件夾下的配置文件
事件(Events)
validitionv0.7.0+
每次驗證完一個字段,都會觸發該事件,此事件須要綁定在form上面,利用此事件能夠實時監測表單的驗證結果
@example:
$("#form").on("validation", function(e, current){
// 表單所有字段驗證經過則返回 true
// 只要有一個字段驗證不經過就返回 false
// 還沒驗證完,即驗證結果未知的狀況下返回 undefined
console.log(this.isValid);
// 當前正在驗證的字段是否經過
console.log(current.isValid);
})
valid.form
表單驗證成功,同options中valid
@example:
$('#form').on('valid.form', function(e, form){
//do something...
});
invalid.form
表單驗證失敗,同options中invalid
@example:
$('#form').on('invalid.form', function(e, form, errors){
//do something...
});
valid.field
字段驗證成功
@example:
$('input[name="username"]').on('valid.field', function(e, result, me){
//do something...
});
invalid.field
字段驗證失敗
@example:
$('input[name="username"]').on('invalid.field', function(e, result, me){
//do something...
});
valid.rule
字段規則驗證成功
@example:
$('input[name="username"]').on('valid.rule', function(e, ruleName){
//「remote」規則驗證經過時
if (ruleName === 'remote') {
//do something...
}
});
invalid.rule
字段規則驗證失敗
@example:
$('input[name="username"]').on('invalid.rule', function(e, ruleName){
//「remote」規則驗證失敗時
if (ruleName === 'remote') {
//do something...
}
});
$input.trigger("validate");
手動觸發元素進行驗證
@example:
//手動觸發username字段驗證
$('input[name="username"]').trigger("validate");
$form.trigger("validate"); v0.7.0+
手動觸發表單進行驗證,驗證經過後不會自動提交
@example:
//手動觸發表單驗證
$('#form').trigger("validate");
$form.trigger("submit");
手動觸發表單提交,在提交前會自動驗證
@example:
//手動觸發表單提交
$('#form').trigger("submit");
$input.trigger("showtip"); v0.5.0+
觸發元素顯示tip消息
@example:
//驗證初始化完成後,當即顯示全部字段的提示$('#form').validator().trigger("showtip");