带回调的jquery自定义验证方法

时间:2013-04-18 19:23:08

标签: jquery jquery-validate

所以我发现你可以添加任何自定义验证逻辑。如果它很简单就不是问题,对吧?

$.validator.addMethod('customRule',function(val, el){
    return val > 2;
},'value cannot be smaller than 2');

$('#myInput').rules('add', { customRule : true });

现在,即使你有一些更困难的东西(例如一个REST调用),它仍然可以完成:

$.validator.addMethod('customRule',function(val, el){
    var validator = this;
    $.get('checkValueOnServer',val).done(function(isValid){
        if(!isValid){
           var errors = {}; 
           errors[el.name] = 'server says: value does not look right!';
           validator.showErrors(errors);
        }
        validator.stopRequest(el, isValid);
    })
    return 'pending';
},'');

现在,在我的情况下,我需要使用回调调用函数,类似

$.validator.addMethod('customRule',function(val, el){
    var validator = this;
    checkValueOnServer(el, function(isValid){ // so function runs for a few secs and returns a callback with a result 
        if(!isValid){
           var errors = {}; 
           errors[el.name] = 'called function says: value does not look right!';
           validator.showErrors(errors);
        }
        validator.stopRequest(el, isValid);
    });
    return 'pending';
},'');

你只看到一个很好的旧回调,而不是deferred对象。所以在后一种情况下,如果我打电话

$('form').valid()它报告它是真的,虽然自定义调用函数报告验证规则未通过,并且元素突出显示并显示错误消息。那有什么不对?告诉那件事的正确方法是什么:表格无效?

1 个答案:

答案 0 :(得分:3)

使用自定义验证方法时,该功能通常只返回truefalse

您的只返回包含文本'pending'的字符串,即使表单通过验证,也会显示required错误消息。您的使用超出了文档的范围......


As per documentation

  

方法回调
实际的方法实现,如果元素有效则返回true 。第一个论点:当前价值。第二个参数:验证元素。第三个参数:参数。