jquery验证器addmethod自定义消息

时间:2009-06-10 15:32:19

标签: jquery validation

我为jquery的验证器插件创建了一个方法,它的工作方式类似于远程规则。不同之处在于我想显示动态错误消息(基于ajax响应)。

jQuery.validator.addMethod("duplicate", function(value, element, params) { 
    var object_settings = this.settings;
    params.data[$(element).attr("name")] = value;
    $.post(params.url, params.data, function(response) {
        if (response == 'true'){ return true; }
        else {
            object_settings.messages[element.name] = response;
            return false;
        }
    }, 'text');
}, '');

它有效......有点......它设置了消息,但最初没有显示它(如果你第二次验证字段,则会显示消息)。

有什么建议吗?

(也许远程规则提供此功能......我在文档中找不到任何内容)

4 个答案:

答案 0 :(得分:15)

这是解决方案....需要调用对象的showErrors函数:

jQuery.validator.addMethod("duplicate", function(value, element, params) { 
    var validator = this;
    params.data[element.name] = value;
    $.post(params.url, params.data, function(response) {
        if (response == 'true'){ return true; }
        else {
            var errors = {};
            errors[element.name] =  response;
            validator.showErrors(errors);
            return false;
        }
    }, 'text');
}, '');

取自jquery.validate.js中的“remote”(917 - 919行)

答案 1 :(得分:9)

正在寻找解决方案,并找到了......

在原始示例中,如果更改此行:

object_settings.messages[element.name] = response;

对此:

$.validator.messages.duplicate = response;

这对我有用。我在这里找到了: http://blogs.teamb.com/craigstuntz/2009/01/15/37923/

答案 2 :(得分:7)

我已按照网站http://blogs.teamb.com/craigstuntz/2009/01/15/37923/#comment-125774中提及的流程成功完成了。

您必须使用动态消息调用该方法,以便显示该消息。例如

$.validator.addMethod("validatePremium", function(value, element, param) {

    if( Condition )    

     {
       $.validator.messages.validatePremium = "your message here";
       //enter code here
       //...
       return false;
     }

    }, $.validator.messages.validatePremium);

答案 3 :(得分:3)

这对我有用

var errorMsg = '', $valid = false;
$.validator.addMethod("methodName",function(val, elem){
   $.ajax({
      url:'your_script.php',
      type:"POST",
      dataType:"json",
      data : {},
      success:function(response){
         if(response.success == false){
            errorMsg = response.msg;
            $valid = response.success;
         }
         else{
            $valid = true;
         }
      }
   });
   $.validator.messages["methodName"] = errorMsg;
   return $valid;
},'');

确保使用您的方法名称替换“ methodName ” 在这种情况下,两个地方都有“复制”(addMethod function 1st arg和addMethod函数体$ .validator.messages [“methodName”])