@@ -895,45 +895,60 @@ export class ValidationService {
895
895
*/
896
896
createValidator ( input : HTMLInputElement , directives : ValidationDirective ) {
897
897
return async ( ) => {
898
- for ( let key in directives ) {
899
- let directive = directives [ key ] ;
900
- let provider = this . providers [ key ] ;
901
898
902
- if ( ! provider ) {
903
- console . log ( 'aspnet-validation provider not implemented: ' + key ) ;
904
- continue ;
905
- }
899
+ // only validate visible fields
900
+ if ( ! this . isHidden ( input ) )
901
+ {
902
+ for ( let key in directives ) {
903
+ let directive = directives [ key ] ;
904
+ let provider = this . providers [ key ] ;
906
905
907
- let result = provider ( input . value , input , directive . params ) ;
908
- let valid = false ;
909
- let error = directive . error ;
906
+ if ( ! provider ) {
907
+ console . log ( 'aspnet-validation provider not implemented: ' + key ) ;
908
+ continue ;
909
+ }
910
910
911
- if ( typeof result === 'boolean' ) {
912
- valid = result ;
913
- } else if ( typeof result === 'string' ) {
914
- valid = false ;
915
- error = result ;
916
- } else {
917
- let resolution = await result ;
918
- if ( typeof resolution === 'boolean' ) {
919
- valid = resolution ;
920
- } else {
911
+ let result = provider ( input . value , input , directive . params ) ;
912
+ let valid = false ;
913
+ let error = directive . error ;
914
+
915
+ if ( typeof result === 'boolean' ) {
916
+ valid = result ;
917
+ } else if ( typeof result === 'string' ) {
921
918
valid = false ;
922
- error = resolution ;
919
+ error = result ;
920
+ } else {
921
+ let resolution = await result ;
922
+ if ( typeof resolution === 'boolean' ) {
923
+ valid = resolution ;
924
+ } else {
925
+ valid = false ;
926
+ error = resolution ;
927
+ }
923
928
}
924
- }
925
929
926
- if ( ! valid ) {
927
- this . addError ( input , error ) ;
928
- return false ;
930
+ if ( ! valid ) {
931
+ this . addError ( input , error ) ;
932
+ return false ;
933
+ }
929
934
}
930
935
}
931
936
932
937
this . removeError ( input ) ;
933
938
return true ;
939
+
934
940
} ;
935
941
}
936
942
943
+ /**
944
+ * Checks if the provided input is hidden from the browser
945
+ * @param input
946
+ * @returns
947
+ */
948
+ private isHidden ( input : HTMLElement ) {
949
+ return ! ( input . offsetWidth || input . offsetHeight || input . getClientRects ( ) . length ) ;
950
+ }
951
+
937
952
/**
938
953
* Load default validation providers and scans the entire document when ready.
939
954
*/
0 commit comments