【问题标题】:Custom Validation for jQuery Validate (two method in one)jQuery Validate 的自定义验证(二合一)
【发布时间】:2011-09-12 19:22:57
【问题描述】:

我想知道,如何在我的方法中调用jquery validate的另一个自定义验证方法来验证一些数据。例如,我有一个名为“文档 ID”的字段,它可以接受 CPF 或 CNPJ(两者都是巴西文档),我需要使用 jquery validate 对其进行验证。我正在做这样的事情:

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!");

当我为每种类型都有一个字段但我只有一个并且我必须发现我的用户在文本字段上输入的内容并对其进行验证时,两者都可以正常工作,如下所示:

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

【问题讨论】:

    标签: javascript jquery validation jquery-validate


    【解决方案1】:

    这个怎么样?

    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.");
    

    【讨论】:

    • 谢谢 rwilliams,你知道如何更改验证消息上显示的消息吗?
    • 更新了我的答案。我不确定您要更改什么错误消息,但请试一试。
    • 完美的 rwilliamsn,这是我需要的一切!谢谢!
    【解决方案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");
    

    【讨论】:

    • 只有一个 CNPJ 字段,这就像一个魅力!谢谢!
    【解决方案3】:

    如何在验证定义范围之外创建这些函数(即不使用匿名函数)?

    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);
    //..
    }
    

    【讨论】:

    • 谢谢 sJhonny,你知道如何更改验证消息上显示的消息吗?
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 2021-08-21
    • 2023-03-31
    • 2018-11-25
    • 1970-01-01
    • 2020-01-15
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多