DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 實用又漂亮的BootstrapValidator表單驗證插件
實用又漂亮的BootstrapValidator表單驗證插件
編輯:關於JavaScript     

本文推薦一款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插件使用教程

以上就是關於本文的全部內容,希望對大家的學習有所幫助。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved