實用又漂亮的BootstrapValidator表單驗證插件
本文推薦一款twitter做的bootstrapValidator.js,本身bootstrap就是twitter做的,那么使用原配的validator也就更值得信賴。從百度上搜bootstrapValidator會出現(xiàn)很多款,但我只推薦這款:

一、一睹為快

為了簡便的介紹,這里只做為空的check。
二、資源引用
下載完資源包后,你可以看到如下的目錄。

然后把以下三個文件引入到你項目。
<link type="text/css" rel="stylesheet" href="${ctx}/components/validate/css/bootstrapValidator.css" />
<script type="text/javascript" src="${ctx}/components/validate/js/bootstrapValidator.js"></script>
<script type="text/javascript" src="${ctx}/components/validate/js/language/zh_CN.js"></script>
三、會員名稱不為空項目配置
<form class="form-signin required-validate" action="${ctx}/login" method="post" onsubmit="return validateCallback(this)">
<div class="form-group">
<div class="row">
<label>賬戶</label>
<input class="form-control" type="text" autofocus name="username" placeholder="請輸入會員編號" autocomplete="off"
data-bv-notempty />
</div>
</div>
</form>
data-bv-notempty表示該會員編號要做為空check。
form-group的div是必須的,否則會報“too much recursion”錯誤。
form表單提交的時候會執(zhí)行validateCallback方法,該方法在第五步中具體介紹。
四、頁面加載完成后啟用bootstrap validator
$(function() {
// validate form
$("form.required-validate").each(function() {
var $form = $(this);
$form.bootstrapValidator();
// 修復(fù)bootstrap validator重復(fù)向服務(wù)端提交bug
$form.on('success.form.bv', function(e) {
// Prevent form submission
e.preventDefault();
});
});
});
在form表單上加上‘class=”required-validate”'屬性,然后通過jquery獲取對應(yīng)form表單,對其執(zhí)行默認(rèn)的bootstrapValidator加載。
一定要注意上面代碼中注釋部分代碼,具體介紹可參照下方修復(fù)BootstrapValidator重復(fù)提交的bug,具體內(nèi)容如下
BootstrapValidator很漂亮,但漂亮的臉蛋下往往會隱藏殺機(jī),這不,出現(xiàn)了重復(fù)提交的bug。
解決辦法:
// validate form
$("form.required-validate", $p).each(function() {
var $form = $(this);
$form.bootstrapValidator().on('success.form.bv', function(e) {
// 阻止默認(rèn)事件提交
e.preventDefault();
});
});
為BootstrapValidator設(shè)置on方法,其key為success.form.bv,value為e.preventDefault();。
bug調(diào)查:

調(diào)查結(jié)果:
1.當(dāng)不使用BootstrapValidator時,就不會出現(xiàn)如圖提示問題。
2.只有首次點擊提交,會重復(fù)提交兩次,而接下來重新輸入用戶名后,就單次提交了。
bug發(fā)生環(huán)境:
...
<button type="submit" style="width: 100%;" class="btn btn-default">提交</button>
</form>
描述:
這是一個普通的form表單,action中為請求地址,form中有onsubmit方法,主要是為了驗證表單,然后發(fā)送請求,最后回調(diào)tabAjaxDone方法。
bug分析:
1.form表單肯定沒有問題,如果沒有bootstrap validate,那是一點問題都沒有。
2.之前使用jquery validate的時候也沒有問題。
3.那么問題只能發(fā)生在bootstrap validate上了。
4.而bootstrap validate的默認(rèn)使用上也是沒有問題的,因為只有首次點擊提交時才會重復(fù)提交。
5.那么這可能是bootstrap validate有默認(rèn)的提交請求。

再查看validate對象,可以看到它默認(rèn)有很多事件,其中formsuccess的嫌疑最大,也就是說有可能是其再次觸發(fā)了提交請求。
bug調(diào)試:
// validate form
$("form.required-validate", $p).each(function() {
var $form = $(this);
$form.bootstrapValidator();
// .on('success.form.bv', function(e) {
// // 阻止默認(rèn)事件提交
// e.preventDefault();
// });
});
1.在頁面初次加載的時候,BootstrapValidator需要按照上述方式進(jìn)行加載,方可進(jìn)行前端數(shù)據(jù)校驗。
2.你已經(jīng)看到注釋的代碼,也許你已經(jīng)猜得到,這就是解決辦法。沒錯,為form加上該事件處理,使用e.preventDefault();阻止默認(rèn)事件提交。
五、form表單提交時驗證項目
function validateCallback(form, callback, confirmMsg) {
YUNM.debug("進(jìn)入到form表單驗證和提交");
var $form = $(form);
var data = $form.data('bootstrapValidator');
if (data) {
// 修復(fù)記憶的組件不驗證
data.validate();
if (!data.isValid()) {
return false;
}
}
$.ajax({
type : form.method || 'POST',
url : $form.attr("action"),
data : $form.serializeArray(),
dataType : "json",
cache : false,
success : callback || YUNM.ajaxDone,
error : YUNM.ajaxError
});
return false;
}
validateCallback中獲取form表單后,通過isValid方法可以返回表單驗證是否通過。
當(dāng)表單驗證通過后,再通過ajax將表單提交到服務(wù)端。
如果大家還想深入學(xué)習(xí),可以點擊這里進(jìn)行學(xué)習(xí),再為大家附3個精彩的專題:
以上就是關(guān)于本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
- bootstrapValidator.min.js表單驗證插件
- bootstrapValidator表單驗證插件學(xué)習(xí)
- Bootstrap中的表單驗證插件bootstrapValidator使用方法整理(推薦)
- BootstrapValidator超詳細(xì)教程(推薦)
- jquery插件bootstrapValidator數(shù)據(jù)驗證詳解
- bootstrapValidator bootstrap-select驗證不可用的解決辦法
- Bootstrapvalidator校驗、校驗清除重置的實現(xiàn)代碼(推薦)
- BootstrapValidator實現(xiàn)注冊校驗和登錄錯誤提示效果
- 基于jQuery 實現(xiàn)bootstrapValidator下的全局驗證
- Bootstrap簡單實用的表單驗證插件BootstrapValidator用法實例詳解
相關(guān)文章
firefox火狐瀏覽器與與ie兼容的2個問題總結(jié)
這幾天遇到幾個頭疼的火狐與ie兼容問題整理下來,希望對需要的朋友有所幫助。2010-07-07
JS+CSS實現(xiàn)感應(yīng)鼠標(biāo)漸變顯示DIV層的方法
這篇文章主要介紹了JS+CSS實現(xiàn)感應(yīng)鼠標(biāo)漸變顯示DIV層的方法,涉及javascript對div層的逐漸顯示與隱藏的實現(xiàn)技巧,需要的朋友可以參考下2015-02-02
js 字?jǐn)?shù)統(tǒng)計,區(qū)分英漢
hta實現(xiàn)的字?jǐn)?shù)統(tǒng)計效果代碼,中文算兩個,英文算一個2008-02-02

