Skip to content

Commit 95d3bf8

Browse files
fix(form): duplicate error displays on invalid form field value
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.
1 parent 59d4729 commit 95d3bf8

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

src/definitions/behaviors/form.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
element = this,
3939

4040
formErrors = [],
41+
formErrorsTracker = {},
4142
keyHeldDown = false,
4243

4344
// set at run-time
@@ -948,7 +949,7 @@
948949
$prompt.css('display', 'none');
949950
}
950951
$prompt
951-
.appendTo($fieldGroup)
952+
.appendTo($fieldGroup.filter('.' + className.error))
952953
;
953954
}
954955
$prompt
@@ -1285,6 +1286,7 @@
12851286
$module.removeClass(className.initial);
12861287
// reset errors
12871288
formErrors = [];
1289+
formErrorsTracker = {};
12881290
if (module.determine.isValid()) {
12891291
module.debug('Form has no validation errors, submitting');
12901292
module.set.success();
@@ -1388,7 +1390,22 @@
13881390
var invalidFields = module.validate.rule(field, rule, true) || [];
13891391
if (invalidFields.length > 0) {
13901392
module.debug('Field is invalid', identifier, rule.type);
1391-
fieldErrors.push(module.get.prompt(rule, field));
1393+
var fieldError = module.get.prompt(rule, field);
1394+
if (!settings.inline) {
1395+
if (
1396+
// Always allow the first error prompt for new field identifiers
1397+
(!(identifier in formErrorsTracker)
1398+
// Also allow multiple error prompts per field identifier but make sure each prompt is unique
1399+
|| formErrorsTracker[identifier].indexOf(fieldError) === -1)
1400+
// Limit the number of unique error prompts for every field identifier if specified
1401+
&& (!errorLimit || (formErrorsTracker[identifier] || []).length < errorLimit)
1402+
) {
1403+
fieldErrors.push(fieldError);
1404+
(formErrorsTracker[identifier] = formErrorsTracker[identifier] || []).push(fieldError);
1405+
}
1406+
} else {
1407+
fieldErrors.push(fieldError);
1408+
}
13921409
fieldValid = false;
13931410
if (showErrors) {
13941411
$(invalidFields).closest($group).addClass(className.error);
@@ -1403,7 +1420,7 @@
14031420
settings.onValid.call($field);
14041421
}
14051422
} else {
1406-
if (showErrors) {
1423+
if (showErrors && fieldErrors.length > 0) {
14071424
formErrors = formErrors.concat(fieldErrors);
14081425
module.add.prompt(identifier, fieldErrors, true);
14091426
settings.onInvalid.call($field, fieldErrors);

0 commit comments

Comments
 (0)