Bootstrap 表單驗(yàn)證formValidation 實(shí)現(xiàn)表單動(dòng)態(tài)驗(yàn)證功能
動(dòng)態(tài)添加input并動(dòng)態(tài)添加新驗(yàn)證方式!
init狀態(tài):
點(diǎn)擊“+”后:
驗(yàn)證后:

知識(shí)點(diǎn):
1 先去官網(wǎng)下載:http://formvalidation.io/
2 導(dǎo)入文件,注意事項(xiàng)我就不多說(shuō)了在遠(yuǎn)程驗(yàn)證那篇我已經(jīng)講過(guò)。
3 用到的關(guān)鍵字:addField、removeField、different
4注意一點(diǎn)就是官網(wǎng)里的例子他們的name是不一樣的。我這里比較偷懶。且項(xiàng)目ajax的時(shí)候不是用的form表單提交,而是自己并接成json提交,所以x,y的name的名字一樣。
好開(kāi)始:
首先是在html里面必須要有一個(gè) “+” 標(biāo)記為addPos,然后有一個(gè)“-” 標(biāo)記為“removPos,
<div id="posXY" class=" panel panel-default ">
<!-- 添加-->
<div class="panel-heading" >設(shè)置車(chē)庫(kù)xy坐標(biāo)</div>
<div class="addPos form-group">
<div class="col-lg-4 col-sm-4 col-xs-4" >
<input type="text" class="form-control text-left" name="garageNo" placeholder="停車(chē)庫(kù)" style="min-width: 150px"/>
</div>
<div class="col-lg-3 col-sm-3 col-xs-3" >
<input type="text" class="form-control" name="posX" placeholder="X"/>
</div>
<div class="col-lg-3 col-sm-3 col-xs-3" >
<input type="text" class="form-control" name="posY" placeholder="Y"/>
</div>
<div class="col-lg-2 col-sm-2 col-xs-2" >
<button type="button" class="btn btn-default addButtonPos"><i class="glyphicon glyphicon-plus"></i></button>
</div>
</div>
<!-- 刪除 -->
<div class="removPos form-group hide" id="posTemplate">
<div class="col-lg-4 col-sm-4 col-xs-4" >
<input type="text" class="form-control text-left" name="garageNo" placeholder="停車(chē)庫(kù)" style="min-width: 150px"/>
</div>
<div class="col-lg-3 col-sm-3 col-xs-3" >
<input type="text" class="form-control" name="posX" placeholder="X"/>
</div>
<div class="col-lg-3 col-sm-3 col-xs-3" >
<input type="text" class="form-control" name="posY" placeholder="Y"/>
</div>
<div class="col-lg-2 col-sm-2 col-xs-2" >
<button type="button" class="btn btn-default removeButtonPos"><i class="glyphicon glyphicon-minus"></i></button>
</div>
</div>
</div>
然后來(lái)個(gè)js:
/**
* pos添加
* @param $that
*/
function addButtonPosClick($that){
var panelId = $that.parents(".topTemplate").attr("id");
var $form=$('#'+panelId+"form")
// defaultPanel(panelId)
var bookIndex=typeObj[panelId]++;
console.log(panelId,bookIndex)
var $template = $('#'+panelId+' #posTemplate'),
$clone =$template
.clone()
.removeClass('hide')
.removeAttr('id')
.attr('step',bookIndex)
.insertBefore($template);
// Update the name attributes
$clone
.find('[name="garageNo"]').attr({"step":bookIndex,"name":"garageNo"+bookIndex})
.click(function(){
clickBindGarageNo(panelId,bookIndex)
}).end()
.find('[name="posX"]').attr("step",bookIndex).end()
.find('[name="posY"]').attr("step",bookIndex).end()
// Add new fields
// Note that we also pass the validator rules for new field as the third parameter
// $('#defaultForm')
// gFieldArr.push(panelId+'[' + bookIndex + '].garageNo')
$form
.formValidation('addField', "garageNo"+bookIndex, formObj.sameAs(false))
.formValidation('addField', 'posX', myPosXY)
.formValidation('addField', 'posY', myPosXY)
}
function myFormValidation($form){
// var $form=$("#"+$panelId+"form")
$form
.formValidation({
framework: 'bootstrap',
locale: 'zh_CN',
message: '值無(wú)效',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields:
{
myimg:{
validators: {
notEmpty: {
message: '請(qǐng)選擇一個(gè)文件上傳'
},
file: {
extension: 'jpeg,jpg,png',
type: 'image/jpeg,image/png',
maxSize: 1*1024 * 1024,
message: '該文件必須為jpeg,jpg,png格式和必須不超過(guò)1MB的大小'
}
}
}
}
})
.on('click', '.addButtonPos', function() {
addButtonPosClick($(this))
})
//Remove button click handler
.on('click', '.removeButtonPos', function() {
var $that = $(this)
var panelId = $that.parents(".topTemplate").attr("id");
// defaultPanel(panelId)
var $row = $(this).parents('.form-group'),
index = $row.attr('step');
// var myname='[' +index + ']'
var bookIndex= typeObj[panelId]--;
// $('#defaultForm')
$form
.formValidation('removeField', $row.find('[name="garageNo'+bookIndex+'"]'))
.formValidation('removeField', $row.find('[name="posX"]'))
.formValidation('removeField', $row.find('[name="posY"]'))
// Remove element containing the fields
$row.remove();
})
因?yàn)槲业捻?xiàng)目有多個(gè)表單提交。但是業(yè)務(wù)相似所以都用這幾個(gè)函數(shù)
比如說(shuō): var form=(“#”+panelId+”form”)用panelId來(lái)區(qū)分是多個(gè)表單。
上面說(shuō)到x,y的name用的是一樣的。但是細(xì)心的就會(huì)發(fā)現(xiàn)garageNo是不一樣的名稱(chēng)。后面添加了bookindex,為什么呢。
因?yàn)闃I(yè)務(wù)需求。同一個(gè)表單中的garageNo的值不可以相同。好比如說(shuō)每一個(gè)人的身份號(hào)不可以相同但是你和你同桌都可以是女的也都可以18歲。。。。
上面已經(jīng)很好的使用了關(guān)鍵字removeField和addField
garageNo的值不可以相同。怎么弄呢。請(qǐng)看下面:
var differentValid= function(diffstr){
var vv={
validators: {
different: {
field: diffstr,
message: '不能有相同的停車(chē)庫(kù)'
}
}
}
return vv
}
當(dāng)用戶(hù)輸入garageNo的值后:
clickBindGarageNo(panelId,idx){
$form.formValidation('addField', "garageNo"+idx, differentValid(diffArr.toString()))
var fv =$form.data('formValidation');
fv.validate();
}
這個(gè)diffArr.toString(),是啥呢。這個(gè)是我遍歷了所有條目的garageNo的name的字符串例如:有3條條目,idx=1 焦點(diǎn)在1上。那么diffArr=[“garageNo0”,”garageNo2”,]
注意一個(gè)bug:如果用多了input,你會(huì)發(fā)現(xiàn)有時(shí)input不會(huì)自動(dòng)驗(yàn)證。比如說(shuō)驗(yàn)證日期的時(shí)候用了日期插件點(diǎn)擊日期回來(lái)后input沒(méi)有驗(yàn)證。
這個(gè)時(shí)候就需要再手動(dòng)驗(yàn)證一次。 上面那段代碼是 先添加新的驗(yàn)證方式,然后驗(yàn)證整個(gè)表單。如果你只是想要驗(yàn)證一個(gè)input 請(qǐng)用:
$form.formValidation('revalidateField', "field");
還有一個(gè)關(guān)于提交的細(xì)節(jié):
當(dāng)我們沒(méi)有設(shè)置提交按鈕。比起提交按鈕在form表單內(nèi)。他這個(gè)插件是會(huì)幫你自動(dòng)提交。但是你也會(huì)發(fā)現(xiàn)。如果你提交服務(wù)失敗。他會(huì)自動(dòng)刷新然后你的頁(yè)面就變成404頁(yè)面或其他錯(cuò)誤頁(yè)面。
但是有的時(shí)候我們不想他刷新。咋辦?
網(wǎng)上好多ajax 提交不刷新的教程。。我比較喜歡用一種就是。我不把提交按鈕放在form里面。然后:
$btn.click(function(){
//....
retrun false;
)}
以上所述是小編給大家介紹的Bootstrap 表單驗(yàn)證formValidation 實(shí)現(xiàn)表單動(dòng)態(tài)驗(yàn)證功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- bootstrap Validator 模態(tài)框、jsp、表單驗(yàn)證 Ajax提交功能
- BootStrap表單驗(yàn)證實(shí)例代碼
- bootstrap 表單驗(yàn)證使用方法
- jquery插件bootstrapValidator表單驗(yàn)證詳解
- 基于BootstrapValidator的Form表單驗(yàn)證(24)
- Bootstrap中的表單驗(yàn)證插件bootstrapValidator使用方法整理(推薦)
- 基于Bootstrap+jQuery.validate實(shí)現(xiàn)表單驗(yàn)證
- 實(shí)用又漂亮的BootstrapValidator表單驗(yàn)證插件
- BootStrap表單驗(yàn)證中的非Submit類(lèi)型按鈕點(diǎn)擊時(shí)觸發(fā)驗(yàn)證的坑
相關(guān)文章
原生JavaScript實(shí)現(xiàn)滑動(dòng)拖動(dòng)驗(yàn)證的示例代碼
這篇文章主要介紹了原生JavaScript實(shí)現(xiàn)滑動(dòng)拖動(dòng)驗(yàn)證的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Android 自定義view仿微信相機(jī)單擊拍照長(zhǎng)按錄視頻按鈕
這篇文章主要介紹了Android 自定義view仿微信相機(jī)單擊拍照長(zhǎng)按錄視頻按鈕,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07
簡(jiǎn)單實(shí)現(xiàn)JS上傳圖片預(yù)覽功能
這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)JS上傳圖片預(yù)覽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
使用js實(shí)現(xiàn)數(shù)據(jù)格式化
這篇文章主要介紹了使用javascript實(shí)現(xiàn)數(shù)據(jù)格式化為字符串,非常的實(shí)用,這里推薦給有相同需求的小伙伴。2014-12-12
javascript使用substring實(shí)現(xiàn)的展開(kāi)與收縮文字功能示例
這篇文章主要介紹了javascript使用substring實(shí)現(xiàn)的展開(kāi)與收縮文字功能,涉及javascript元素遍歷與屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
JavaScript SHA512&SHA256加密算法詳解
本文給大家分享的是javascript版的SHA512&SHA256加密算法的代碼,以及用法,有需要的小伙伴可以參考下。2015-08-08

