我們在接觸Bootstrap的時候總會遇到不同的問題和困難,今天我們就來說說有關(guān)于“BootstrapValidator 表單驗證超詳要怎么做?”這個問題。下面是小編整理的有關(guān)于這個問題的相關(guān)內(nèi)容,希望對大家的學(xué)習(xí)和了解有所幫助。
一、引入 js 和 css 文件
在我們開始項目的時候我們需要導(dǎo)入下面這兩個文件:?bootstrapValidator.js
?、?bootstrapValidator.css
?。我們需要在有jquery和bootstrap的頁面里引入。
二、編寫html
我們在項目中的 html文件中編寫 ?form
?表單,添加表單控件,如果我們想對某一字段添加驗證規(guī)則的話,則默認需要以?<div class="form-group"></div>
?包裹。內(nèi)部的話則是?<input class="form-control"/>
?標簽必須要有?name
?屬性,里面的值用來匹配字段。代碼如下所示:
<form class="form-horizontal">
<div class="form-group">
<label class="col-lg-3 control-label">Username</label>
<div class="col-lg-9">
<input type="text" class="form-control" name="username" />
</div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">Email address</label>
<div class="col-lg-9">
<input type="text" class="form-control" name="email" />
</div>
</div>
</form>
三、添加規(guī)則驗證
1、在html標簽中添加,代碼如下所示:
<div class="form-group">
<label class="col-lg-3 control-label">Username</label>
<div class="col-lg-5">
<input type="text" class="form-control" name="username"
data-bv-message="The username is not valid"
required
data-bv-notempty-message="The username is required and cannot be empty"
pattern="[a-zA-Z0-9]+"
data-bv-regexp-message="The username can only consist of alphabetical, number" />
</div>
</div>
2、添加 js 文件,代碼如下:
$(function () {
$("#form-test").bootstrapValidator({
live: 'disabled',//驗證時機,enabled是內(nèi)容有變化就驗證(默認),disabled和submitted是提交再驗證
excluded: [':disabled', ':hidden', ':not(:visible)'],//排除無需驗證的控件,比如被禁用的或者被隱藏的
submitButtons: '#btn-test',//指定提交按鈕,如果驗證失敗則變成disabled,但我沒試成功,反而加了這句話非submit按鈕也會提交到action指定頁面
message: '通用的驗證失敗消息',//好像從來沒出現(xiàn)過
feedbackIcons: {//根據(jù)驗證結(jié)果顯示的各種圖標
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
text: {
validators: {
notEmpty: {//檢測非空,radio也可用
message: '文本框必須輸入'
},
stringLength: {//檢測長度
min: 6,
max: 30,
message: '長度必須在6-30之間'
},
regexp: {//正則驗證
regexp: /^[a-zA-Z0-9_\.]+$/,
message: '所輸入的字符不符要求'
},
remote: {//將內(nèi)容發(fā)送至指定頁面驗證,返回驗證結(jié)果,比如查詢用戶名是否存在
url: '指定頁面',
message: 'The username is not available'
},
different: {//與指定文本框比較內(nèi)容相同
field: '指定文本框name',
message: '不能與指定文本框內(nèi)容相同'
},
emailAddress: {//驗證email地址
message: '不是正確的email地址'
},
identical: {//與指定控件內(nèi)容比較是否相同,比如兩次密碼不一致
field: 'confirmPassword',//指定控件name
message: '輸入的內(nèi)容不一致'
},
date: {//驗證指定的日期格式
format: 'YYYY/MM/DD',
message: '日期格式不正確'
},
choice: {//check控件選擇的數(shù)量
min: 2,
max: 4,
message: '必須選擇2-4個選項'
}
}
}
}
});
$("#btn-test").click(function () {//非submit按鈕點擊后進行驗證,如果是submit則無需此句直接驗證
$("#form-test").bootstrapValidator('validate');//提交驗證
if ($("#form-test").data('bootstrapValidator').isValid()) {//獲取驗證結(jié)果,如果成功,執(zhí)行下面代碼
alert("yes");//驗證成功后的操作,如ajax
}
});
});
四、前端自定義驗證規(guī)則
1、回調(diào)自定義驗證
通過?Bootstrapvalidator
?的前端自定義驗證為?callback
?,代碼如下所示:
"rowkey": {
message: 'rowkey驗證失敗',
validators: {
stringLength:{
max: 1000,
message: 'rowkey不能超過1000個字符'
},
callback:{
callback : function(value, validator, $field) {
if ($('input:radio[name="databaseType"]:checked').val() == "Hbase" &&
value == ""){
return {
valid: false,
message: 'rowkey不能為空'
}
}
else{
return true
}
}
}
}
}
2、拓展插件的validators方法
這個方法是將項目中常用的方法放到了一個單獨?js
?中從而實現(xiàn)我們需要的效果的,代碼如下所示:
$(function () {
$.fn.bootstrapValidator.validators.checkIdCard = {
/**
* @param {BootstrapValidator} 表單驗證實例對象
* @param {jQuery} $field jQuery 對象
* @param {Object} 表單驗證配置項值
* @returns {boolean}
*/
validate: function (validator, $field, options) {
// debugger;
try {
return checkIdCardNo($field.val());
}catch (e){
console.error(e);
}
return false;
}
};
}(window.jQuery));
3、remote 后端自定義驗證
我們知道在?Bootstrapvalidator
?的前端自定義驗證為?remote
?,這個我們在數(shù)據(jù)庫驗重時經(jīng)常會用到 ,代碼如下所示:
"tableName": {
message: '表名稱驗證失敗',
validators: {
notEmpty: {
message: '表名稱不能為空'
},
stringLength:{
max: 100,
message: '表名稱不能超過100個字符'
},
remote: {
message: '表名重復(fù)',
url: 'check',
data : '',//這里默認會傳遞該驗證字段的值到后端
delay: 2000 //這里特別要說明,必須要加此屬性,否則用戶輸入一個字就會訪問后臺一次,會消耗大量的系統(tǒng)資源,
}
}
},
后端部分代碼:
//檢測新增metaTableName是否重復(fù)
def check(){
def map = new HashMap()
def result = service.check(params.name)
if(result){
map.put("valid",true)
}else{
map.put("valid",false)
}
render(map as JSON) // 注意后端傳到前端的格式必須是帶有valid屬性的json對象才會被validator識別, // 如果返回任何其他的值,頁面驗證將獲取不到驗證結(jié)果導(dǎo)致無法驗證
}
{"valid":false} //表示不合法,驗證不通過
{"valid":true} //表示合法,驗證通過
五、常用事件
1、獲取validator對象或?qū)嵗?/p>
我們這個方法一般是使用直接調(diào)用 ?$(form).bootstrapValidator(options)
?來初始化?validator
?。在初始后之后有兩種方法來獲取我們的?validator
?對象或?qū)嵗?,方法如下所示?/p>
方法一:
// Get plugin instance
var bootstrapValidator = $(form).data('bootstrapValidator');
// and then call method
bootstrapValidator.methodName(parameters)
方法二:
$(form).bootstrapValidator(methodName, parameters);
這種方式獲取的是代表當前?form
?的?jquery
?對象,調(diào)用方式是將方法名和參數(shù)分別傳入到?bootstrapValidator
?方法中,可以鏈式調(diào)用。
兩種方法使用如下所示:
// The first way
$(form)
.data('bootstrapValidator')
.updateStatus('birthday', 'NOT_VALIDATED')
.validateField('birthday');
// The second one
$(form)
.bootstrapValidator('updateStatus', 'birthday', 'NOT_VALIDATED')
.bootstrapValidator('validateField', 'birthday');
2、重置某一單一驗證字段驗證規(guī)則
$(formName).data(“bootstrapValidator”).updateStatus("fieldName", "NOT_VALIDATED", null );
3、重置表單所有驗證規(guī)則
$(formName).data("bootstrapValidator").resetForm();
4、手動觸發(fā)表單驗證
//觸發(fā)全部驗證
$(formName).data(“bootstrapValidator”).validate();
//觸發(fā)指定字段的驗證
$(formName).data(“bootstrapValidator”).validateField('fieldName');
5、獲取當前表單狀態(tài)
var flag = $(formName).data(“bootstrapValidator”).isValid();
6、根據(jù)指定字段名稱獲取驗證對象
// element = jq對象 / null
var element = $(formName).data(“bootstrapValidator”).getFieldElements('fieldName');
總結(jié):
這些內(nèi)容就是我們今天小編分享的有關(guān)于“BootstrapValidator 表單驗證超詳要怎么做?”這個問題的相關(guān)內(nèi)容,如果你有更好的方法也可以和大家一同分享學(xué)習(xí),更多有關(guān)于bootstrap的相關(guān)學(xué)習(xí)內(nèi)容和知識我們都可以在W3cschool中進行學(xué)習(xí)和了解。