所以我发现您可以添加任何自定义验证逻辑。如果它足够简单那就不是问题,对吧?
$.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()
它报告它是 true,尽管自定义调用函数报告验证规则未通过并且元素突出显示并显示错误消息。那么出了什么问题呢?告诉这件事的正确方法是什么:表格无效?
最佳答案
使用自定义验证方法时,该函数通常仅返回 true
或 false
。
如果您的自定义验证函数返回
true
,则该元素通过验证并且不会触发错误消息。 http://jsfiddle.net/kCqy5/1/如果您的自定义验证函数返回
false
,则元素验证失败并显示错误消息。 http://jsfiddle.net/kCqy5/2/如果您的自定义验证函数未返回
true
或false
,则结果似乎不太可预测。 http://jsfiddle.net/kCqy5/
您仅返回包含文本'pending'
的字符串,即使表单通过验证,也会显示required
错误消息。您的使用超出了文档的范围...
method Callback
The actual method implementation, returning true if an element is valid. First argument: Current value. Second argument: Validated element. Third argument: Parameters.
关于带回调的jquery自定义验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16091405/