|
74 | 74 | },
|
75 | 75 | _getInlineErrorElement = function($input, conf) {
|
76 | 76 | 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); |
77 | 88 | };
|
78 | 89 |
|
79 | 90 | /**
|
|
335 | 346 |
|
336 | 347 | $elem.trigger('validation', [validation===true]);
|
337 | 348 |
|
| 349 | + // Run element validation callback |
| 350 | + if( typeof conf.onElementValidate == 'function' ) { |
| 351 | + conf.onElementValidate((validation === true), $elem, validation); |
| 352 | + } |
| 353 | + |
338 | 354 | if(validation !== true) {
|
339 | 355 | addErrorMessage(validation, $elem);
|
340 | 356 | } else {
|
|
369 | 385 |
|
370 | 386 | // display all error messages in top of form
|
371 | 387 | 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 | + } |
378 | 395 | }
|
379 |
| - |
380 | 396 | // Display error message below input field or in defined container
|
381 | 397 | else {
|
382 | 398 | $.each(errorInputs, function(i, $input) {
|
|
476 | 492 | onModulesLoaded : null,
|
477 | 493 | language : false,
|
478 | 494 | onSuccess : false,
|
479 |
| - onError : false |
| 495 | + onError : false, |
| 496 | + onElementValidate : false |
480 | 497 | });
|
481 | 498 |
|
482 | 499 | conf = $.extend(defaultConf, conf || {});
|
|
568 | 585 | errorMessageClass : 'form-error', // class name of div containing error messages when validation fails
|
569 | 586 | validationRuleAttribute : 'data-validation', // name of the attribute holding the validation rules
|
570 | 587 | 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, |
572 | 595 | scrollToTopOnError : true,
|
573 | 596 | dateFormat : 'yyyy-mm-dd',
|
574 | 597 | addValidClassOnAll : false, // whether or not to apply class="valid" even if the input wasn't validated
|
|
0 commit comments