zoukankan      html  css  js  c++  java
  • $("#EditClient-Form").data("validator").form();

    https://github.com/jquery-validation/jquery-validation/blob/master/src/core.js#L15

    以下这段代码把插件作为validator塞到data里面

    // Check if a validator for this form was already created
            var validator = $.data( this[ 0 ], "validator" );
            if ( validator ) {
                return validator;
            }

    https://jqueryvalidation.org/Validator.form/

    Validator.form()

    Description: Validates the form, returns true if it is valid, false otherwise.

    Example:

    Triggers form validation programmatically.

    var validator = $( "#myform" ).validate();
    validator.form();

    https://plugins.jquery.com/validation/

    https://github.com/jquery-validation/jquery-validation/blob/master/src/core.js#L436

    // https://jqueryvalidation.org/Validator.form/
            form: function() {
                this.checkForm();
                $.extend( this.submitted, this.errorMap );
                this.invalid = $.extend( {}, this.errorMap );
                if ( !this.valid() ) {
                    $( this.currentForm ).triggerHandler( "invalid-form", [ this ] );
                }
                this.showErrors();
                return this.valid();
            },
    checkForm: function() {
                this.prepareForm();
                for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {
                    this.check( elements[ i ] );
                }
                return this.valid();
            },

    调试的时候可以设置断点,查看errorList里面是哪一个元素的验证出错了

    valid: function() {
                return this.size() === 0;
            },
    size: function() {
                return this.errorList.length;
            },
    formatAndAdd: function( element, rule ) {
                var message = this.defaultMessage( element, rule );
    
                this.errorList.push( {
                    message: message,
                    element: element,
                    method: rule.method
                } );
    
                this.errorMap[ element.name ] = message;
                this.submitted[ element.name ] = message;
            },

    https://github.com/jquery-validation/jquery-validation/blob/master/src/core.js#L889

    defaultShowErrors: function() {
                var i, elements, error;
                for ( i = 0; this.errorList[ i ]; i++ ) {
                    error = this.errorList[ i ];
                    if ( this.settings.highlight ) {
                        this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
                    }
                    this.showLabel( error.element, error.message );
                }
                if ( this.errorList.length ) {
                    this.toShow = this.toShow.add( this.containers );
                }
                if ( this.settings.success ) {
                    for ( i = 0; this.successList[ i ]; i++ ) {
                        this.showLabel( this.successList[ i ] );
                    }
                }
                if ( this.settings.unhighlight ) {
                    for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {
                        this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );
                    }
                }
                this.toHide = this.toHide.not( this.toShow );
                this.hideErrors();
                this.addWrapper( this.toShow ).show();
            },
    showLabel: function( element, message ) {
                var place, group, errorID, v,
                    error = this.errorsFor( element ),
                    elementID = this.idOrName( element ),
                    describedBy = $( element ).attr( "aria-describedby" );
    
                if ( error.length ) {
    
                    // Refresh error/success class
                    error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
    
                    // Replace message on existing label
                    error.html( message );
                } else {
    
                    // Create error element
                    error = $( "<" + this.settings.errorElement + ">" )
                        .attr( "id", elementID + "-error" )
                        .addClass( this.settings.errorClass )
                        .html( message || "" );
    
                    // Maintain reference to the element to be placed into the DOM
                    place = error;
                    if ( this.settings.wrapper ) {
    
                        // Make sure the element is visible, even in IE
                        // actually showing the wrapped element is handled elsewhere
                        place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent();
                    }
                    if ( this.labelContainer.length ) {
                        this.labelContainer.append( place );
                    } else if ( this.settings.errorPlacement ) {
                        this.settings.errorPlacement.call( this, place, $( element ) );
                    } else {
                        place.insertAfter( element );
                    }
    
                    // Link error back to the element
                    if ( error.is( "label" ) ) {
    
                        // If the error is a label, then associate using 'for'
                        error.attr( "for", elementID );
    
                        // If the element is not a child of an associated label, then it's necessary
                        // to explicitly apply aria-describedby
                    } else if ( error.parents( "label[for='" + this.escapeCssMeta( elementID ) + "']" ).length === 0 ) {
                        errorID = error.attr( "id" );
    
                        // Respect existing non-error aria-describedby
                        if ( !describedBy ) {
                            describedBy = errorID;
                        } else if ( !describedBy.match( new RegExp( "\b" + this.escapeCssMeta( errorID ) + "\b" ) ) ) {
    
                            // Add to end of list if not already present
                            describedBy += " " + errorID;
                        }
                        $( element ).attr( "aria-describedby", describedBy );
    
                        // If this element is grouped, then assign to all elements in the same group
                        group = this.groups[ element.name ];
                        if ( group ) {
                            v = this;
                            $.each( v.groups, function( name, testgroup ) {
                                if ( testgroup === group ) {
                                    $( "[name='" + v.escapeCssMeta( name ) + "']", v.currentForm )
                                        .attr( "aria-describedby", error.attr( "id" ) );
                                }
                            } );
                        }
                    }
                }
                if ( !message && this.settings.success ) {
                    error.text( "" );
                    if ( typeof this.settings.success === "string" ) {
                        error.addClass( this.settings.success );
                    } else {
                        this.settings.success( error, element );
                    }
                }
                this.toShow = this.toShow.add( error );
            },

     https://jqueryvalidation.org/validate/

    validate( [options ] ) Returns: Validator

  • 相关阅读:
    数据存储过程学习
    Python实现目录文件扫描功能
    python关于邮件发送包smtplib的实践分享
    Java自学笔记之学生管理系统
    Java自学笔记
    Java自学笔记1206
    java自学笔记
    Django常用命令
    django+SQLite搭建轻量级个人博客(六)数据校验
    django+SQLite搭建轻量级个人博客(五)分页
  • 原文地址:https://www.cnblogs.com/chucklu/p/12604370.html
Copyright © 2011-2022 走看看