1000hz / bootstrap-validator

A user-friendly HTML5 form validation jQuery plugin for Bootstrap 3
http://1000hz.github.io/bootstrap-validator
MIT License
2.38k stars 1.07k forks source link

Custom validation doen't add has-error class on Select2 #652

Open array81 opened 5 years ago

array81 commented 5 years ago

I have create a custom validation to check if the user have select one or more items on select2 field with multiselect option, if user didn't have select nothing the validation is not pass. I have 2 problems:

  1. custom function is call only when I call validator('validate') but not when select2 is unfocus;
  2. when call validator('validate') custom function is call but the class "has-error" is not added to form group so the form is submit.

My JS code:

$('#saveinvoice').validator({       
    custom: {
        'customers': function($el) { 
            if ($el.select2('data').length==0) {
                return "Select one or more customers!";
            }
        }

    }
});

function submitInvoiceData(){ 
    if ($('#saveinvoice').validator('validate').has('.has-error').length == 0) {
        ...
        document.getElementById('saveinvoice').submit();
    };
}

My HTML code:

              <div class="col-md-6">
                <div class="form-group">
                  <label for="Contacts">Contacts</label>
                  <select class="form-control select2" id="Contacts" name="Contacts" multiple="multiple" data-placeholder="" style="width: 100%;" value="2" data-customers="true" required>
                     <option value="1">AAAA</option>
                     <option value="2">BBBB</option>
                     <option value="3">CCCC</option>
                  </select>
                </div>
              </div>
aalyusuf commented 5 years ago

a workaround:

$(document).on("invalid.bs.validator","form",function(e){
        $(".select2-hidden-accessible").trigger("change");
});