所以我发现你可以添加任何自定义验证逻辑。如果它很简单就不是问题,对吧?
$.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()
它报告它是真的,虽然自定义调用函数报告验证规则未通过,并且元素突出显示并显示错误消息。那有什么不对?告诉那件事的正确方法是什么:表格无效?
答案 0 :(得分:3)
使用自定义验证方法时,该功能通常只返回true
或false
。
如果您的自定义验证函数返回true
,则该元素会通过验证,并且不会触发任何错误消息。 http://jsfiddle.net/kCqy5/1/
如果您的自定义验证函数返回false
,则元素验证失败,并显示错误消息。 http://jsfiddle.net/kCqy5/2/
如果您的自定义验证功能未返回true
或false
,则结果似乎不是非常可预测的。 http://jsfiddle.net/kCqy5/
您的只返回包含文本'pending'
的字符串,即使表单通过验证,也会显示required
错误消息。您的使用超出了文档的范围......
方法回调
实际的方法实现,如果元素有效则返回true 。第一个论点:当前价值。第二个参数:验证元素。第三个参数:参数。