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-12Android 自定義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-12javascript使用substring實(shí)現(xiàn)的展開(kāi)與收縮文字功能示例
這篇文章主要介紹了javascript使用substring實(shí)現(xiàn)的展開(kāi)與收縮文字功能,涉及javascript元素遍歷與屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2019-06-06JavaScript SHA512&SHA256加密算法詳解
本文給大家分享的是javascript版的SHA512&SHA256加密算法的代碼,以及用法,有需要的小伙伴可以參考下。2015-08-08