使用jQuery Validation插件的Bootstrap

Mig*_*ges 151 jquery-validate twitter-bootstrap twitter-bootstrap-3

我正在尝试使用jQuery Validation Plugin为我的表单添加验证,但是我遇到了一个问题,当我使用输入组时插件会输出错误消息.

问题

$('form').validate({
    rules: {
        firstname: {
            minlength: 3,
            maxlength: 15,
            required: true
        },
        lastname: {
            minlength: 3,
            maxlength: 15,
            required: true
        }
    },
    highlight: function(element) {
        $(element).closest('.form-group').addClass('has-error');
    },
    unhighlight: function(element) {
        $(element).closest('.form-group').removeClass('has-error');
    }
});
Run Code Online (Sandbox Code Playgroud)

我的代码: http ://jsfiddle.net/hTPY7/4/

Mig*_*ges 342

为了与twitter bootstrap 3完全兼容,我需要覆盖一些插件方法:

// override jquery validate plugin defaults
$.validator.setDefaults({
    highlight: function(element) {
        $(element).closest('.form-group').addClass('has-error');
    },
    unhighlight: function(element) {
        $(element).closest('.form-group').removeClass('has-error');
    },
    errorElement: 'span',
    errorClass: 'help-block',
    errorPlacement: function(error, element) {
        if(element.parent('.input-group').length) {
            error.insertAfter(element.parent());
        } else {
            error.insertAfter(element);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

参见示例:http://jsfiddle.net/mapb_1990/hTPY7/7/

  • 这样做很有效,除了一件事:对jQuery Validate 1.11.1进行测试并在表单的验证器上调用`resetForm()`将不会对无效元素调用`unhighlight`,因此必须删除`has-error`类重置表单时请注意.我所做的是调用以下函数而不是直接调用验证器的`resetForm()`:`function resetForm(form_id){$(form_id).find(".form-group").removeClass("has-error" ); $(form_id).数据( '验证')resetForm().}` (3认同)

And*_*ohn 86

为了与Bootstrap 3完全兼容,我添加了对输入组,无线电复选框的支持,这在其他解决方案中是缺失的.

2017年10月20日更新:检查了其他答案的建议,并为无线电内联的特殊标记添加了额外支持,为一组无线电或复选框提供了更好的错误放置,并添加了对自定义.novalidation类的支持,以防止对控件进行验证.希望这有助于并感谢您的建议.

包含验证插件后添加以下调用:

$.validator.setDefaults({
    errorElement: "span",
    errorClass: "help-block",
    highlight: function (element, errorClass, validClass) {
        // Only validation controls
        if (!$(element).hasClass('novalidation')) {
            $(element).closest('.form-group').removeClass('has-success').addClass('has-error');
        }
    },
    unhighlight: function (element, errorClass, validClass) {
        // Only validation controls
        if (!$(element).hasClass('novalidation')) {
            $(element).closest('.form-group').removeClass('has-error').addClass('has-success');
        }
    },
    errorPlacement: function (error, element) {
        if (element.parent('.input-group').length) {
            error.insertAfter(element.parent());
        }
        else if (element.prop('type') === 'radio' && element.parent('.radio-inline').length) {
            error.insertAfter(element.parent().parent());
        }
        else if (element.prop('type') === 'checkbox' || element.prop('type') === 'radio') {
            error.appendTo(element.parent().parent());
        }
        else {
            error.insertAfter(element);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这适用于所有Bootstrap 3表单类.如果使用水平形式,则必须使用以下标记.这可确保帮助块文本遵循表单组的验证状态("has-error",...).

<div class="form-group">
    <div class="col-lg-12">
        <div class="checkbox">
            <label id="LabelConfirm" for="CheckBoxConfirm">
                <input type="checkbox" name="CheckBoxConfirm" id="CheckBoxConfirm" required="required" />
                I have read all the information 
            </label>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)


DAR*_*SEL 22

我使用仅使用Twitter Bootstrap 3设计的表单.我为validor设置默认函数,并仅使用规则运行validate方法.我使用FontAweSome中的图标,但您可以在doc示例中使用Glyphicons.

在此输入图像描述

jQuery.validator.setDefaults({
    highlight: function (element, errorClass, validClass) {
        if (element.type === "radio") {
            this.findByName(element.name).addClass(errorClass).removeClass(validClass);
        } else {
            $(element).closest('.form-group').removeClass('has-success has-feedback').addClass('has-error has-feedback');
            $(element).closest('.form-group').find('i.fa').remove();
            $(element).closest('.form-group').append('<i class="fa fa-exclamation fa-lg form-control-feedback"></i>');
        }
    },
    unhighlight: function (element, errorClass, validClass) {
        if (element.type === "radio") {
            this.findByName(element.name).removeClass(errorClass).addClass(validClass);
        } else {
            $(element).closest('.form-group').removeClass('has-error has-feedback').addClass('has-success has-feedback');
            $(element).closest('.form-group').find('i.fa').remove();
            $(element).closest('.form-group').append('<i class="fa fa-check fa-lg form-control-feedback"></i>');
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

完成.运行验证功能后:

$("#default-register-user").validate({
    rules: {
        'login': {
            required: true,
            minlength: 5,
            maxlength: 20
        },
        'email': {
            required: true,
            email: true,
            minlength: 5,
            maxlength: 100
        },
        'password': {
            required: true,
            minlength: 6,
            maxlength: 25
        },
        'confirmpassword': {
            required: true,
            minlength: 5,
            maxlength: 25,
            equalTo: "#password"
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

JSFiddle示例


小智 10

添加到上面的Miguel Borges答案,您可以通过在高亮/不高亮代码块中添加以下行来向用户提供绿色成功反馈.

    highlight: function(element) {
        $(element).closest('.form-group').removeClass('has-success').addClass('has-error');
    },
    unhighlight: function(element) {
        $(element).closest('.form-group').removeClass('has-error').addClass('has-success');
    }
Run Code Online (Sandbox Code Playgroud)


Dri*_*eña 8

这是您需要的解决方案,您可以使用该errorPlacement方法覆盖错误消息的放置位置

$('form').validate({
    rules: {
        firstname: {
            minlength: 3,
            maxlength: 15,
            required: true
        },
        lastname: {
            minlength: 3,
            maxlength: 15,
            required: true
        }
    },
    errorPlacement: function(error, element) {
        error.insertAfter('.form-group'); //So i putted it after the .form-group so it will not include to your append/prepend group.
    }, 
    highlight: function(element) {
        $(element).closest('.form-group').addClass('has-error');
    },
    unhighlight: function(element) {
        $(element).closest('.form-group').removeClass('has-error');
    }
});
Run Code Online (Sandbox Code Playgroud)

它像魔术一样对我有用.干杯


小智 6

对于 bootstrap 4,这对我很好

    $.validator.setDefaults({
    highlight: function(element) {
        $(element).closest('.form-group').find(".form-control:first").addClass('is-invalid');
    },
    unhighlight: function(element) {
        $(element).closest('.form-group').find(".form-control:first").removeClass('is-invalid');
        $(element).closest('.form-group').find(".form-control:first").addClass('is-valid');

    },
    errorElement: 'span',
    errorClass: 'invalid-feedback',
    errorPlacement: function(error, element) {
        if(element.parent('.input-group').length) {
            error.insertAfter(element.parent());
        } else {
            error.insertAfter(element);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

希望它会有所帮助!