How to make select2 work with jquery.validation plugin?

后端 未结 15 584
北荒
北荒 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:36

    To validate 'select2' inputs you first must tell jquery validate to consider hidden elements:

    $.validator.setDefaults({ 
    ignore: [],
    });
    

    This is custom highlight / unhighlight that i use for pointing select2 and tagit errors with jquery validate:

    $("#someform").validate({
            rules: {
                nazwa: {
                    required: true
                },
                ilosc_w_opakowaniu: {
                    required: "#czy_opakowanie_zbiorcze:checked"
                }
            },
            messages: {
                nazwa: "Musisz wypełnić pole [Nazwa]",
                ilosc_w_opakowaniu: "Musisz podać ilość produktu w opakowaniu zbiorczym",
            },
    
            highlight: function( element, errorClass, validClass ) {
                if ( element.type === "radio" ) {
                    this.findByName( element.name ).addClass( errorClass ).removeClass( validClass );
                } else {
                    $( element ).addClass( errorClass ).removeClass( validClass );
                }
    
                // select2
                if( $(element).hasClass('select2-hidden-accessible') ){
                    dzik = $(element).next('span.select2');
                    if(dzik)
                        dzik.addClass( errorClass ).removeClass( validClass );
                }
    
                // tagit
                dzik2 = $(element).parent().find('ul.tagit') 
                if( dzik2.length == 1 )
                    dzik2.addClass( errorClass ).removeClass( validClass );
    
            },
            unhighlight: function( element, errorClass, validClass ) {
                if ( element.type === "radio" ) {
                    this.findByName( element.name ).removeClass( errorClass ).addClass( validClass );
                } else {
                    $( element ).removeClass( errorClass ).addClass( validClass );
                }
    
                // select2
                if( $(element).hasClass('select2-hidden-accessible') ){
                    dzik = $(element).next('span.select2');
                    if(dzik)
                        dzik.removeClass( errorClass ).addClass( validClass );
                }
    
                // tagit
                dzik2 = $(element).parent().find('ul.tagit') 
                if( dzik2.length == 1 )
                    dzik2.removeClass( errorClass ).addClass( validClass );
            }
         });
    

    And some CSS:

    /** select2 error hightight **/
    .select2.error .select2-selection--single{
        border-color:red !important;
        color:red !important;
    }
    
    /** tagit error highlight **/
    .tagit.error{
       border-color:red !important;
       color:red !important;
    }
    

提交回复
热议问题