|
38 | 38 | element = this,
|
39 | 39 |
|
40 | 40 | formErrors = [],
|
| 41 | + formErrorsTracker = {}, |
41 | 42 | keyHeldDown = false,
|
42 | 43 |
|
43 | 44 | // set at run-time
|
|
948 | 949 | $prompt.css('display', 'none');
|
949 | 950 | }
|
950 | 951 | $prompt
|
951 |
| - .appendTo($fieldGroup) |
| 952 | + .appendTo($fieldGroup.filter('.' + className.error)) |
952 | 953 | ;
|
953 | 954 | }
|
954 | 955 | $prompt
|
|
1285 | 1286 | $module.removeClass(className.initial);
|
1286 | 1287 | // reset errors
|
1287 | 1288 | formErrors = [];
|
| 1289 | + formErrorsTracker = {}; |
1288 | 1290 | if (module.determine.isValid()) {
|
1289 | 1291 | module.debug('Form has no validation errors, submitting');
|
1290 | 1292 | module.set.success();
|
|
1388 | 1390 | var invalidFields = module.validate.rule(field, rule, true) || [];
|
1389 | 1391 | if (invalidFields.length > 0) {
|
1390 | 1392 | 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 | + } |
1392 | 1409 | fieldValid = false;
|
1393 | 1410 | if (showErrors) {
|
1394 | 1411 | $(invalidFields).closest($group).addClass(className.error);
|
|
1403 | 1420 | settings.onValid.call($field);
|
1404 | 1421 | }
|
1405 | 1422 | } else {
|
1406 |
| - if (showErrors) { |
| 1423 | + if (showErrors && fieldErrors.length > 0) { |
1407 | 1424 | formErrors = formErrors.concat(fieldErrors);
|
1408 | 1425 | module.add.prompt(identifier, fieldErrors, true);
|
1409 | 1426 | settings.onInvalid.call($field, fieldErrors);
|
|
0 commit comments