Skip to content

Commit f13bfdd

Browse files
authored
Merge pull request #7 from skttl/only-validate-hidden-fields
Only validate field if not hidden
2 parents c31baa7 + 325d84d commit f13bfdd

File tree

1 file changed

+40
-25
lines changed

1 file changed

+40
-25
lines changed

src/index.ts

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -895,45 +895,60 @@ export class ValidationService {
895895
*/
896896
createValidator(input: HTMLInputElement, directives: ValidationDirective) {
897897
return async () => {
898-
for (let key in directives) {
899-
let directive = directives[key];
900-
let provider = this.providers[key];
901898

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];
906905

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+
}
910910

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') {
921918
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+
}
923928
}
924-
}
925929

926-
if (!valid) {
927-
this.addError(input, error);
928-
return false;
930+
if (!valid) {
931+
this.addError(input, error);
932+
return false;
933+
}
929934
}
930935
}
931936

932937
this.removeError(input);
933938
return true;
939+
934940
};
935941
}
936942

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+
937952
/**
938953
* Load default validation providers and scans the entire document when ready.
939954
*/

0 commit comments

Comments
 (0)