/** * Extensao da lib de validaçao com customizacoes para BR e Dtp * @author STPD */ function setupValidation() { console.log('setting up validation'); /* sobrescreve msg padrao com ptBR */ jQuery.extend(jQuery.validator.messages, { required: "Este campo é obrigatório", remote: "Corrija este campo", email: "Informe um email válido", url: "Informe uma URL válida", date: "Informe uma data válida", number: "Informe um valor numérico", digits: "Informe somente dígitos", equalTo: "Informe o mesmo valor novamente", accept: "Informe um valor com uma extensão válida", maxlength: jQuery.validator.format("Informe não mais que {0} caracteres"), minlength: jQuery.validator.format("Informe ao menos {0} caracteres"), rangelength: jQuery.validator.format("Informe um valor entre {0} e {1} caracteres de comprimento"), range: jQuery.validator.format("Informe um valor entre {0} e {1}"), max: jQuery.validator.format("Informe um valor menor ou igual a {0}"), min: jQuery.validator.format("Informe um valor maior ou igual a {0}") }); /* http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery */ jQuery.validator.addMethod("dateBR", function(value, element) { // contando chars if(value.length!=10) return false; // verificando data var data = value; var dia = data.substr(0,2); var barra1 = data.substr(2,1); var mes = data.substr(3,2); var barra2 = data.substr(5,1); var ano = data.substr(6,4); if(data.length!=10||barra1!="/"||barra2!="/"||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia>31||mes>12)return false; if((mes==4||mes==6||mes==9||mes==11) && dia==31)return false; if(mes==2 && (dia>29||(dia==29 && ano%4!=0)))return false; if(ano < 1900)return false; return true; }, "Informe uma data válida"); $.validator.addMethod('integer', function(value, element, param) { if ((value == '') || value == 0) { return true; } return ((value != 0) && (value == parseInt(value, 10))); }, 'Informe um número inteiro'); $.validator.methods.number = function (value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); }; jQuery.validator.addClassRules('obrigatorio', { required: true }); jQuery.validator.addClassRules('dataFormat', { dateBR: true }); jQuery.validator.addClassRules('numero', { number: true }); jQuery.validator.addClassRules('inteiro', { integer: true }); /* Path */ // $('input[class*=pathFormat]').validate({type: "alphasInt", add: "/\\"}); /* Valores numéricos */ // $('input[class*=numeroFormat]').validate({ type: "int", ctrl: "no" }); /* Campos de texto */ // $('input[class*=textoFormat]').validate({ type: "alphas", add: " ", ctrl: "no" }); } /** Inicialiaçao das validações*/ function initValidation() { // seta o nome (com o valor do id) onde nao tiver $("input:not([name])").each(function(){ var id = this.id; this.name = id; }); // ajustar labels /* $('input.required,input.obrigatorio').each(function(){ var label = $('label[for="'+ this.id +'"]'); var text = $(label).text(); if (! text.indexOf($requiredSymbol) >= 0){ $(label).text($requiredSymbol + ' ' + text); } if (! $(label).hasClass($requiredLabelClass)){ $(label).addClass($requiredLabelClass); } }); */ //necessario delay (setTimeout) para compatibilidade com maskedInput var maskFocusOut = function(element, event) { if ( !this.checkable(element) ) { var currentObj = this; var currentElement = element; var delay = function () { currentObj.element(currentElement); }; setTimeout(delay, 50); } }; $('form.validate').validate({ onkeyup: false, focusCleanup: true, wrapper: 'li', errorClass: 'invalid', errorPlacement: function(error, element) { // error.appendTo( element.parent('div') ); }, onfocusout: maskFocusOut, invalidHandler: function(form, validator) { console.log('invalidHandler'); var errors = validator.numberOfInvalids(); if (errors) { var message = (errors == 1) ? '
  • 1 campo possui valor inválido. Verifique o campo em vermelho.
  • ' : '
  • ' + errors + ' campos possuem valores inválidos. Verifique os campos em vermelho.
  • '; var divMessages = $("body .mensagem:first"); if (divMessages.children('ul').length == 0) { $('