|
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