2011-09-12 104 views
1

我想知道,我怎么能在我的方法中调用另一个jquery验证的自定义验证方法来验证一些数据。对于示例,我有一个名为“文档ID”的字段,可以接受CPF或CNPJ(都是巴西文档),我需要使用jquery验证来验证它。我在做这样的事情:自定义验证jQuery验证(两种方法之一)

jQuery.validator.addMethod("cpf", function(value, element) { 
    // my validation for CPF Documents 
}, "CPF inválido!"); 

jQuery.validator.addMethod("cnpj", function(value, element) { 
    // my validation for CNPJ Documents 
}, "CNPJ inválido!"); 

两个正常工作时,我有每种类型的一个领域,但我只有一次生命,我必须发现什么在我的文本字段用户类型和验证它,somethind是这样的:

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

    if (value.lenght <= 11) { 
     // validation for CPF and change the message 
    } 
    else if (value.lenght <= 14) { 
     // validation for CNPJ and change the message 
    } 

}, 'Documento inválido'); 

,但我不知道该怎么称呼我的另一个功能(documentId)内,这些自定义函数(CPF和CNPJ)。

我该怎么办?以及如何更改自定义验证中的消息?

谢谢! 干杯!

我已为我的jsbin代码,如果你想看看:http://jsbin.com/ijetex/5/edit

回答

4

这是怎么回事?

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

    if (value.length <= 11) { 
     jQuery.validator.methods.cpf.call(this, value, element); 
    } 
    else if (value.length <= 14) { 
     jQuery.validator.methods.cnpj.call(this, value, element); 
    } 

}, 'Documento inválido'); 

完整的示例更改错误信息

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.documento = "Informe um CPF válido."; 
    } 

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

    } 

    return false; 

}, "Informe um documento válido."); 
+0

谢谢rwilliams,你知道我该如何更改验证消息中显示的消息? –

+0

更新了我的答案。我不确定你想要改变什么错误信息,但给了上面的一个镜头。 – rwilliams

+0

完美rwilliamsn,这是我需要的一切!谢谢! –

1

怎么样(即不使用匿名函数)验证定义的范围之外创建这些功能?

function cpfValide(value,element) { 
    //something 
} 

function cnpjValide(value,element){ 
    //something 
} 
jQuery.validator.addMethod("cpf", cpfValide, "CPF inválido!"); 


jQuery.validator.addMethod("documentoId", function(value, element) { 
    return cpfValidate(value,element) || cnpjValidate(value,element); 
//.. 
} 
+0

感谢sJhonny,你知道我怎么可以改变的验证信息中显示的信息? –

2
jQuery.validator.addMethod("cnpj", function(value, element) { 
    return this.optional(element) || /^[0-9]{2}.[0-9]{3}.[0-9]{3}?\/[0-9]{4}-[0-9]{2}$/.test(value); 
}, "Formato: 00.000.000/0000-00"); 
+0

只有一个CNPJ领域,这就像一个魅力!谢谢! – Preston