Problem with jQuery Validation Plugin

Asked

Viewed 811 times

1

I’m using the resource remote to check if there is a register in my database with the same Cpf. More precise that this field is not mandatory be optional.

So I tried to put required: false but it does not work there is this possibility or if it is a consultation it will only be mandatory.

cpf: {
cpf: true,                          
remote: {
    url: "/clientes/consulta_cliente",
    type: "post",
    data: {cpf: function(){ return $("input[name='cpf']").val();}}
}}

code to make the validity cpf:true

jQuery.validator.addMethod("cpf", function(value, element) {
value = value.replace('.','');
value = value.replace('.','');
cpf = value.replace('-','');
while(cpf.length < 11) cpf = "0"+ cpf;
var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
var a = [];
var b = new Number;
var c = 11;
for (i=0; i<11; i++){
    a[i] = cpf.charAt(i);
    if (i < 9) b += (a[i] * --c);
}
if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
b = 0;
c = 11;
for (y=0; y<10; y++) b += (a[y] * c--);
if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }
if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) return false;
return true;
}, "Informe um CPF válido."); 
  • What is the message that appears to you when you place no number on the Form? What do you mean cpf: true?

  • 1

    Jorge I took this and it seems to be working, I hadn’t paid attention to it, I picked up an example on the net but it seems to have given

  • Anything can rule it :)

  • precise yes, Cpf is a function I added to the scrip to validate Cpf.

  • Look at my answer.

2 answers

1

When a verification depends on a user input you should use depends, returning true or false to the cpf according to one condition, in this case the field is empty or not:

cpf: {
    cpf: {
        depends: function () {
            return $("input[name='cpf']").val()!='';
        }
    },                          
    remote: {
        url: "/clientes/consulta_cliente",
       type: "post",
       data: {cpf: function(){ return $("input[name='cpf']").val();}}
   }
}

Thus you ensure that only in case the value of the CPF is different from empty does the check.

As you have in your code he will always check Cpf whether it exists or not.

  • where should I put it? why am I putting before Cpf:true

  • Instead of cpf:true.

  • The depends will take care to say if it is cpf:true or cpf:false depending on whether or not you have completed Cpf.

  • friend intendi his logic more unfortunately do not know where I should harvest.

  • Check out my issue.

  • 1

    Thank you very much worked... God bless you...

Show 1 more comment

1


Face I use this function, it has 3 methods, one to validate only CPF other only for CNPJ and another called document that validates both according to the amount of characters in the field. It validates without needing to make dependencies and if the field has empty it does not stick in the field.

    jQuery.validator.addMethod("documento", function(value, element) {

    // remove pontuações
    value = value.replace('.', '');
    value = value.replace('.', '');
    value = value.replace('-', '');
    value = value.replace('/', '');

    if (value.length <= 11) {
        if (jQuery.validator.methods.cpf.call(this, value, element)) {
            return true;
        } else {
            this.settings.messages.documento = "Informe um CPF valido.";
        }

    }
    else if (value.length <= 14) {
        if (jQuery.validator.methods.cnpj.call(this, value, element)) {
            return true;
        } else {
            this.settings.messages.documento = "Informe um CNPJ valido.";
        }

    }

    return false;

}, "Informe um documento valido.");





// validação do CPF
jQuery.validator.addMethod("cpf", function(value, element) {
    value = jQuery.trim(value);

    value = value.replace('.', '');
    value = value.replace('.', '');
    cpf = value.replace('-', '');
    while (cpf.length < 11)
        cpf = "0" + cpf;
    var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
    var a = [];
    var b = 0;
    var c = 11;
    for (i = 0; i < 11; i++) {
        a[i] = cpf.charAt(i);
        if (i < 9)
            b += (a[i] * --c);
    }
    if ((x = b % 11) < 2) {
        a[9] = 0;
    } else {
        a[9] = 11 - x;
    }
    b = 0;
    c = 11;
    for (y = 0; y < 10; y++)
        b += (a[y] * c--);
    if ((x = b % 11) < 2) {
        a[10] = 0;
    } else {
        a[10] = 11 - x;
    }

    var retorno = true;
    if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg))
        retorno = false;

    return this.optional(element) || retorno;

}, "Informe um CPF válido.");


// validação do CNPJ
jQuery.validator.addMethod("cnpj", function(cnpj, element) {
    cnpj = jQuery.trim(cnpj);// retira espaços em branco
    // DEIXA APENAS OS NÚMEROS
    cnpj = cnpj.replace('/', '');
    cnpj = cnpj.replace('.', '');
    cnpj = cnpj.replace('.', '');
    cnpj = cnpj.replace('-', '');

    var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
    digitos_iguais = 1;

    if (cnpj.length < 14 && cnpj.length < 15) {
        return false;
    }
    for (i = 0; i < cnpj.length - 1; i++) {
        if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {
            digitos_iguais = 0;
            break;
        }
    }

    if (!digitos_iguais) {
        tamanho = cnpj.length - 2;
        numeros = cnpj.substring(0, tamanho);
        digitos = cnpj.substring(tamanho);
        soma = 0;
        pos = tamanho - 7;

        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2) {
                pos = 9;
            }
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(0)) {
            return false;
        }
        tamanho = tamanho + 1;
        numeros = cnpj.substring(0, tamanho);
        soma = 0;
        pos = tamanho - 7;
        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2) {
                pos = 9;
            }
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(1)) {
            return false;
        }
        return true;
    } else {
        return false;
    }
}, "Informe um CNPJ valido."); // Mensagem padrão 
  • thanks Euler more I had already tested with this function I think problem is due to remote function I think the two together without this trick that Jorge passed me does not work, because if take the remote function it works right

Browser other questions tagged

You are not signed in. Login or sign up in order to post.