App下載

BootstrapValidator 表單驗(yàn)證超詳要怎么做?表單驗(yàn)證超詳細(xì)教程 !

猿友 2021-06-29 14:37:23 瀏覽數(shù) (5114)
反饋

我們?cè)诮佑|Bootstrap的時(shí)候總會(huì)遇到不同的問(wèn)題和困難,今天我們就來(lái)說(shuō)說(shuō)有關(guān)于“BootstrapValidator 表單驗(yàn)證超詳要怎么做?”這個(gè)問(wèn)題。下面是小編整理的有關(guān)于這個(gè)問(wèn)題的相關(guān)內(nèi)容,希望對(duì)大家的學(xué)習(xí)和了解有所幫助。


一、引入 js 和 css 文件

在我們開(kāi)始項(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?屬性,里面的值用來(lái)匹配字段。代碼如下所示:

<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)'],//排除無(wú)需驗(yàn)證的控件,比如被禁用的或者被隱藏的  
        submitButtons: '#btn-test',//指定提交按鈕,如果驗(yàn)證失敗則變成disabled,但我沒(méi)試成功,反而加了這句話非submit按鈕也會(huì)提交到action指定頁(yè)面  
        message: '通用的驗(yàn)證失敗消息',//好像從來(lái)沒(méi)出現(xiàn)過(guò)  
        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則無(wú)需此句直接驗(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)證

通過(guò)?Bootstrapvalidator?的前端自定義驗(yàn)證為?callback?,代碼如下所示:

"rowkey": {
    message: 'rowkey驗(yàn)證失敗',
    validators: {
        stringLength:{
            max: 1000,
            message: 'rowkey不能超過(guò)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: '表名稱不能超過(guò)100個(gè)字符'
        },
        remote: {
            message: '表名重復(fù)',
            url: 'check',
            data : '',//這里默認(rèn)會(huì)傳遞該驗(yàn)證字段的值到后端
            delay: 2000 //這里特別要說(shuō)明,必須要加此屬性,否則用戶輸入一個(gè)字就會(huì)訪問(wèn)后臺(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)致無(wú)法驗(yàn)證
    }

{"valid":false} //表示不合法,驗(yàn)證不通過(guò)  
{"valid":true} //表示合法,驗(yàn)證通過(guò)

五、常用事件

1、獲取validator對(duì)象或?qū)嵗?/p>

我們這個(gè)方法一般是使用直接調(diào)用 ?$(form).bootstrapValidator(options)?來(lái)初始化?validator?。在初始后之后有兩種方法來(lái)獲取我們的?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è)問(wèn)題的相關(guān)內(nèi)容,如果你有更好的方法也可以和大家一同分享學(xué)習(xí),更多有關(guān)于bootstrap的相關(guān)學(xué)習(xí)內(nèi)容和知識(shí)我們都可以在W3cschool中進(jìn)行學(xué)習(xí)和了解。


0 人點(diǎn)贊