所以我剛發現你可以添加任何自定義驗證邏輯。如果它很簡單,那不是問題,對吧?jQuery的回調自定義驗證方法
$.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()
它報告它是真的,雖然自定義調用的函數報告驗證規則未通過並且該元素被突出顯示並顯示錯誤消息。那麼,怎麼了?什麼是正確的方式來說明這件事:表單是無效的?
請構建一個jsFiddle演示此問題。我幾乎無法相信'.valid()'在有無效字段時返回'true' - 這不應該發生。顯然,你的代碼或插件有問題......可能不是插件。 – Sparky
我想我可以通過存儲上次檢查時間戳和值來嘗試解決方法。這就是我正在談論的(只有價值,沒有時間戳)http://plnkr.co/edit/eK6OGZ4qto4wqOsBoXBH。我想我現在必須決定什麼是最小的時間範圍內的價值將假定正確。無需再次檢查... – Agzam