BootstrapValidator 表单验证超详要怎么做?表单验证超详细教程 !

猿友 2021-06-29 14:37:23 浏览数 (5569)
反馈

我们在接触Bootstrap的时候总会遇到不同的问题和困难,今天我们就来说说有关于“BootstrapValidator 表单验证超详要怎么做?”这个问题。下面是小编整理的有关于这个问题的相关内容,希望对大家的学习和了解有所帮助。


一、引入 js 和 css 文件

在我们开始项目的时候我们需要导入下面这两个文件:​bootstrapValidator.js​、​bootstrapValidator.css​。我们需要在有jquery和bootstrap的页面里引入。


二、编写html

我们在项目中的 html文件中编写 ​form ​表单,添加表单控件,如果我们想对某一字段添加验证规则的话,则默认需要以​<div class="form-group"></div>​包裹。内部的话则是​<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>

三、添加规则验证

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是内容有变化就验证(默认),disabled和submitted是提交再验证  
        excluded: [':disabled', ':hidden', ':not(:visible)'],//排除无需验证的控件,比如被禁用的或者被隐藏的  
        submitButtons: '#btn-test',//指定提交按钮,如果验证失败则变成disabled,但我没试成功,反而加了这句话非submit按钮也会提交到action指定页面  
        message: '通用的验证失败消息',//好像从来没出现过  
        feedbackIcons: {//根据验证结果显示的各种图标  
            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: {//将内容发送至指定页面验证,返回验证结果,比如查询用户名是否存在  
                        url: '指定页面',  
                        message: 'The username is not available'  
                    },  
                    different: {//与指定文本框比较内容相同  
                        field: '指定文本框name',  
                        message: '不能与指定文本框内容相同'  
                    },  
                    emailAddress: {//验证email地址  
                        message: '不是正确的email地址'  
                    },  
                    identical: {//与指定控件内容比较是否相同,比如两次密码不一致  
                        field: 'confirmPassword',//指定控件name  
                        message: '输入的内容不一致'  
                    },  
                    date: {//验证指定的日期格式  
                        format: 'YYYY/MM/DD',  
                        message: '日期格式不正确'  
                    },  
                    choice: {//check控件选择的数量  
                        min: 2,  
                        max: 4,  
                        message: '必须选择2-4个选项'  
                    }  
                }  
            }  
        }  
    });  
    $("#btn-test").click(function () {//非submit按钮点击后进行验证,如果是submit则无需此句直接验证  
        $("#form-test").bootstrapValidator('validate');//提交验证  
        if ($("#form-test").data('bootstrapValidator').isValid()) {//获取验证结果,如果成功,执行下面代码  
            alert("yes");//验证成功后的操作,如ajax  
        }  
    });  
});

四、前端自定义验证规则

1、回调自定义验证

通过​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​中从而实现我们需要的效果的,代码如下所示:

$(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​,这个我们在数据库验重时经常会用到 ,代码如下所示:

"tableName": {
    message: '表名称验证失败',
    validators: {
        notEmpty: {
            message: '表名称不能为空'
        },
        stringLength:{
            max: 100,
            message: '表名称不能超过100个字符'
        },
        remote: {
            message: '表名重复',
            url: 'check',
            data : '',//这里默认会传递该验证字段的值到后端
            delay: 2000 //这里特别要说明,必须要加此属性,否则用户输入一个字就会访问后台一次,会消耗大量的系统资源,
        }
    }
},

后端部分代码:

//检测新增metaTableName是否重复
    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识别,                 // 如果返回任何其他的值,页面验证将获取不到验证结果导致无法验证
    }

{"valid":false} //表示不合法,验证不通过  
{"valid":true} //表示合法,验证通过

五、常用事件

1、获取validator对象或实例

我们这个方法一般是使用直接调用 ​$(form).bootstrapValidator(options)​来初始化​validator​。在初始后之后有两种方法来获取我们的​validator​对象或实例,方法如下所示:

方法一:

// Get plugin instance  
var bootstrapValidator = $(form).data('bootstrapValidator');  
// and then call method  
bootstrapValidator.methodName(parameters)  

方法二:

$(form).bootstrapValidator(methodName, parameters);  

这种方式获取的是代表当前​form​的​jquery​对象,调用方式是将方法名和参数分别传入到​bootstrapValidator​方法中,可以链式调用。

两种方法使用如下所示:

// 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、重置某一单一验证字段验证规则

$(formName).data(“bootstrapValidator”).updateStatus("fieldName",  "NOT_VALIDATED",  null );

3、重置表单所有验证规则

$(formName).data("bootstrapValidator").resetForm();

4、手动触发表单验证

//触发全部验证
$(formName).data(“bootstrapValidator”).validate();
//触发指定字段的验证
$(formName).data(“bootstrapValidator”).validateField('fieldName');

5、获取当前表单状态

var flag = $(formName).data(“bootstrapValidator”).isValid();

6、根据指定字段名称获取验证对象

// element = jq对象 / null
var element = $(formName).data(“bootstrapValidator”).getFieldElements('fieldName');

总结:

这些内容就是我们今天小编分享的有关于“BootstrapValidator 表单验证超详要怎么做?”这个问题的相关内容,如果你有更好的方法也可以和大家一同分享学习,更多有关于bootstrap的相关学习内容和知识我们都可以在W3cschool中进行学习和了解。


0 人点赞