Skip to content

Commit d6288f9

Browse files
committed
Added callback onElementValidate and possibility to customize errorMessage through errorMessageTemplate config param
1 parent 00d6147 commit d6288f9

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

form-validator/jquery.form-validator.js

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@
7474
},
7575
_getInlineErrorElement = function($input, conf) {
7676
return document.getElementById($input.attr('name')+'_err_msg');
77+
},
78+
_templateMessage = function($form, title, errorMessages, conf) {
79+
var messages = conf.errorMessageTemplate.messages.replace(/\{errorTitle\}/g, title);
80+
var fields = [];
81+
$.each(errorMessages, function(i, msg) {
82+
fields.push(conf.errorMessageTemplate.field.replace(/\{msg\}/g, msg));
83+
});
84+
messages = messages.replace(/\{fields\}/g, fields.join(''));
85+
var container = conf.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g, conf.errorMessageClass);
86+
container = container.replace(/\{messages\}/g, messages);
87+
$form.children().eq(0).before(container);
7788
};
7889

7990
/**
@@ -335,6 +346,11 @@
335346

336347
$elem.trigger('validation', [validation===true]);
337348

349+
// Run element validation callback
350+
if( typeof conf.onElementValidate == 'function' ) {
351+
conf.onElementValidate((validation === true), $elem, validation);
352+
}
353+
338354
if(validation !== true) {
339355
addErrorMessage(validation, $elem);
340356
} else {
@@ -369,14 +385,14 @@
369385

370386
// display all error messages in top of form
371387
if (conf.errorMessagePosition === 'top') {
372-
var messages = '<strong>' + language.errorTitle + '</strong>';
373-
$.each(errorMessages, function(i, mess) {
374-
messages += '<br />* ' + mess;
375-
});
376-
377-
$form.children().eq(0).before('<div class="' + conf.errorMessageClass + ' alert alert-danger">' + messages + '</div>');
388+
_templateMessage($form, language.errorTitle, errorMessages, conf);
389+
}
390+
// Customize display message
391+
else if(conf.errorMessagePosition === 'custom') {
392+
if( typeof conf.errorMessageCustom === 'function' ) {
393+
conf.errorMessageCustom($form, language.errorTitle, errorMessages, conf);
394+
}
378395
}
379-
380396
// Display error message below input field or in defined container
381397
else {
382398
$.each(errorInputs, function(i, $input) {
@@ -476,7 +492,8 @@
476492
onModulesLoaded : null,
477493
language : false,
478494
onSuccess : false,
479-
onError : false
495+
onError : false,
496+
onElementValidate : false
480497
});
481498

482499
conf = $.extend(defaultConf, conf || {});
@@ -568,7 +585,13 @@
568585
errorMessageClass : 'form-error', // class name of div containing error messages when validation fails
569586
validationRuleAttribute : 'data-validation', // name of the attribute holding the validation rules
570587
validationErrorMsgAttribute : 'data-validation-error-msg', // define custom err msg inline with element
571-
errorMessagePosition : 'element', // Can be either "top" or "element"
588+
errorMessagePosition : 'element', // Can be either "top" or "element" or "custom"
589+
errorMessageTemplate : {
590+
container: '<div class="{errorMessageClass} alert alert-danger">{messages}</div>',
591+
messages: '<strong>{errorTitle}</strong><ul>{fields}</ul>',
592+
field: '<li>{msg}</li>'
593+
},
594+
errorMessageCustom: _templateMessage,
572595
scrollToTopOnError : true,
573596
dateFormat : 'yyyy-mm-dd',
574597
addValidClassOnAll : false, // whether or not to apply class="valid" even if the input wasn't validated

package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"volo": {
3+
"url": "https://raw.githubusercontent.com/lagden/jQuery-Form-Validator/{version}/form-validator/jquery.form-validator.js"
4+
},
5+
"main": "jquery.form-validator.js"
6+
}

0 commit comments

Comments
 (0)