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