Skip to content

Commit

Permalink
fix(form): duplicate error displays on invalid form field value
Browse files Browse the repository at this point in the history
Adds a variable formErrorsTracker that tracks which field identifiers have already pushed an error prompt in the formErrors variable which limits the number of error prompt for every field identifier into 1.
  • Loading branch information
BrianJavier99 authored Aug 2, 2024
1 parent 59d4729 commit 95d3bf8
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions src/definitions/behaviors/form.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
element = this,

formErrors = [],
formErrorsTracker = {},
keyHeldDown = false,

// set at run-time
Expand Down Expand Up @@ -948,7 +949,7 @@
$prompt.css('display', 'none');
}
$prompt
.appendTo($fieldGroup)
.appendTo($fieldGroup.filter('.' + className.error))
;
}
$prompt
Expand Down Expand Up @@ -1285,6 +1286,7 @@
$module.removeClass(className.initial);
// reset errors
formErrors = [];
formErrorsTracker = {};
if (module.determine.isValid()) {
module.debug('Form has no validation errors, submitting');
module.set.success();
Expand Down Expand Up @@ -1388,7 +1390,22 @@
var invalidFields = module.validate.rule(field, rule, true) || [];
if (invalidFields.length > 0) {
module.debug('Field is invalid', identifier, rule.type);
fieldErrors.push(module.get.prompt(rule, field));
var fieldError = module.get.prompt(rule, field);
if (!settings.inline) {
if (
// Always allow the first error prompt for new field identifiers
(!(identifier in formErrorsTracker)
// Also allow multiple error prompts per field identifier but make sure each prompt is unique
|| formErrorsTracker[identifier].indexOf(fieldError) === -1)
// Limit the number of unique error prompts for every field identifier if specified
&& (!errorLimit || (formErrorsTracker[identifier] || []).length < errorLimit)
) {
fieldErrors.push(fieldError);
(formErrorsTracker[identifier] = formErrorsTracker[identifier] || []).push(fieldError);
}
} else {
fieldErrors.push(fieldError);
}
fieldValid = false;
if (showErrors) {
$(invalidFields).closest($group).addClass(className.error);
Expand All @@ -1403,7 +1420,7 @@
settings.onValid.call($field);
}
} else {
if (showErrors) {
if (showErrors && fieldErrors.length > 0) {
formErrors = formErrors.concat(fieldErrors);
module.add.prompt(identifier, fieldErrors, true);
settings.onInvalid.call($field, fieldErrors);
Expand Down

0 comments on commit 95d3bf8

Please sign in to comment.