2011-09-12 98 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