How to make select2 work with jquery.validation plugin?

后端 未结 15 583
北荒
北荒 2020-12-01 02:40

I\'m trying to validate select2 field using jquey.validation plugin but nothing happens.

I want to make select required field.

I\'m using this custom validat

相关标签:
15条回答
  • 2020-12-01 03:40

    I solved the problem, the solution is to modify the highlight, unhighlight and above all errorPlacement methods for each instance of validate. However, in order not to modify each file, I put the modifications in the file jquery.validate.js

    highlight: function( element, errorClass, validClass ) {
            if ( element.type === "radio" ) {
                this.findByName( element.name ).addClass( errorClass ).removeClass( validClass );
            } else {
                var elem = $(element);
                if (elem.attr('readonly') == 'readonly') {
                    if (elem.hasClass("input-group-addon")) {
                       $("#" + elem.attr("id")).parent().addClass(errorClass);
                    } else {
                        $( element ).addClass( errorClass ).removeClass( validClass );
                    }
                } else {
                    if (elem.hasClass("select2-hidden-accessible")) {
                       $("#select2-" + elem.attr("id") + "-container").parent().addClass(errorClass);
                    } else {
                        $( element ).addClass( errorClass ).removeClass( validClass );
                    }
                }
            }
        },
        unhighlight: function( element, errorClass, validClass ) {
            if ( element.type === "radio" ) {
                this.findByName( element.name ).removeClass( errorClass ).addClass( validClass );
            } else {
                var elem = $(element);
                if (elem.attr('readonly') == 'readonly') {
                    if (elem.hasClass("input-group-addon")) {
                       $("#" + elem.attr("id")).parent().removeClass(errorClass);
                    } else {
                        $( element ).addClass( errorClass ).removeClass( validClass );
                    }
                } else {
                    if (elem.hasClass("select2-hidden-accessible")) {
                        $("#select2-" + elem.attr("id") + "-container").parent().removeClass(errorClass);
                    } else {
                        $( element ).removeClass( errorClass ).addClass( validClass );
                    }
                }
            }
        },
        errorPlacement: function(error, element) {
            var elem = $(element);
            if (elem.attr('readonly') == 'readonly') {
                element = $("#" + elem.attr("id")).parent();
                error.insertAfter(element);
            } else {
                if (elem.hasClass("select2-hidden-accessible")) {
                    element = $("#select2-" + elem.attr("id") + "-container").parent().parent().parent();
                    error.insertAfter(element);
                } else {
                    error.insertAfter(element);
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-01 03:41

    This doesn't work in Bootstrap Validator() because the validator includes all the inputs in the form. This means it will validate the input search field of the select2 plugin. which will interfere with the multiselect validation

    To fix this simply go to the validator.js Add the select2 input search class .select2-search__field to the ignore list:

    Validator.INPUT_SELECTOR = ':input:not([type="submit"], button, .select2-search__field):enabled:visible'
    
    0 讨论(0)
  • 2020-12-01 03:42

    Found an answer on the forums @ https://github.com/select2/select2/issues/215 posted by corinnaerin. Worked perfectly for me. Sample code at http://plnkr.co/edit/4QaSguIiYsJtLpuPF8Rc?p=preview

          var $select = $('select').select2({
            placeholder: 'Choose',
            allowClear: true
          });
    
          /*
           * When you change the value the select via select2, it triggers
           * a 'change' event, but the jquery validation plugin
           * only re-validates on 'blur'
           */
          $select.on('change', function() {
            $(this).trigger('blur');
          });
    
          $('#myForm').validate({
            ignore: 'input[type=hidden], .select2-input, .select2-focusser'
          });
    
    0 讨论(0)
提交回复
热议问题