本文推薦一款twitter做的bootstrapValidator.js,本身bootstrap就是twitter做的,那麼使用原配的validator也就更值得信賴。從百度上搜bootstrapValidator會出現很多款,但我只推薦這款:

一、一睹為快

為了簡便的介紹,這裡只做為空的check。
BootstrapValidator官方下載地址
二、資源引用
下載完資源包後,你可以看到如下的目錄。

然後把以下三個文件引入到你項目。
<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表單提交的時候會執行validateCallback方法,該方法在第五步中具體介紹。
四、頁面加載完成後啟用bootstrap validator
$(function() {
// validate form
$("form.required-validate").each(function() {
var $form = $(this);
$form.bootstrapValidator();
// 修復bootstrap validator重復向服務端提交bug
$form.on('success.form.bv', function(e) {
// Prevent form submission
e.preventDefault();
});
});
});
在form表單上加上‘class=”required-validate”'屬性,然後通過jquery獲取對應form表單,對其執行默認的bootstrapValidator加載。
一定要注意上面代碼中注釋部分代碼,具體介紹可參照下方修復BootstrapValidator重復提交的bug,具體內容如下
BootstrapValidator很漂亮,但漂亮的臉蛋下往往會隱藏殺機,這不,出現了重復提交的bug。
解決辦法:
// validate form
$("form.required-validate", $p).each(function() {
var $form = $(this);
$form.bootstrapValidator().on('success.form.bv', function(e) {
// 阻止默認事件提交
e.preventDefault();
});
});
為BootstrapValidator設置on方法,其key為success.form.bv,value為e.preventDefault();。
bug調查:

調查結果:
1.當不使用BootstrapValidator時,就不會出現如圖提示問題。
2.只有首次點擊提交,會重復提交兩次,而接下來重新輸入用戶名後,就單次提交了。
bug發生環境:
復制代碼 代碼如下:<form class="required-validate" action="${ctx}/mem/login?callbackType=forward" method="post" onsubmit="return validateCallback(this, tabAjaxDone)" type="login">
...
<button type="submit" style="width: 100%;" class="btn btn-default">提交</button>
</form>
描述:
這是一個普通的form表單,action中為請求地址,form中有onsubmit方法,主要是為了驗證表單,然後發送請求,最後回調tabAjaxDone方法。
bug分析:
1.form表單肯定沒有問題,如果沒有bootstrap validate,那是一點問題都沒有。
2.之前使用jquery validate的時候也沒有問題。
3.那麼問題只能發生在bootstrap validate上了。
4.而bootstrap validate的默認使用上也是沒有問題的,因為只有首次點擊提交時才會重復提交。
5.那麼這可能是bootstrap validate有默認的提交請求。

再查看validate對象,可以看到它默認有很多事件,其中formsuccess的嫌疑最大,也就是說有可能是其再次觸發了提交請求。
bug調試:
// validate form
$("form.required-validate", $p).each(function() {
var $form = $(this);
$form.bootstrapValidator();
// .on('success.form.bv', function(e) {
// // 阻止默認事件提交
// e.preventDefault();
// });
});
1.在頁面初次加載的時候,BootstrapValidator需要按照上述方式進行加載,方可進行前端數據校驗。
2.你已經看到注釋的代碼,也許你已經猜得到,這就是解決辦法。沒錯,為form加上該事件處理,使用e.preventDefault();阻止默認事件提交。
五、form表單提交時驗證項目
function validateCallback(form, callback, confirmMsg) {
YUNM.debug("進入到form表單驗證和提交");
var $form = $(form);
var data = $form.data('bootstrapValidator');
if (data) {
// 修復記憶的組件不驗證
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方法可以返回表單驗證是否通過。
當表單驗證通過後,再通過ajax將表單提交到服務端。
如果大家還想深入學習,可以點擊這裡進行學習,再為大家附3個精彩的專題:
Bootstrap學習教程
Bootstrap實戰教程
Bootstrap插件使用教程
以上就是關於本文的全部內容,希望對大家的學習有所幫助。