2013-04-18 33 views
2

所以我剛發現你可以添加任何自定義驗證邏輯。如果它很簡單,那不是問題,對吧?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()它報告它是真的,雖然自定義調用的函數報告驗證規則未通過並且該元素被突出顯示並顯示錯誤消息。那麼,怎麼了?什麼是正確的方式來說明這件事:表單是無效的?

+0

請構建一個jsFiddle演示此問題。我幾乎無法相信'.valid()'在有無效字段時返回'true' - 這不應該發生。顯然,你的代碼或插件有問題......可能不是插件。 – Sparky

+0

我想我可以通過存儲上次檢查時間戳和值來嘗試解決方法。這就是我正在談論的(只有價值,沒有時間戳)http://plnkr.co/edit/eK6OGZ4qto4wqOsBoXBH。我想我現在必須決定什麼是最小的時間範圍內的價值將假定正確。無需再次檢查... – Agzam

回答

3

當使用自定義驗證方法時,該函數通常僅返回truefalse

此致僅返回包含文本'pending',即使窗體通過驗證被顯示在required錯誤消息的字符串。您使用的是文檔的範圍之外......


As per documentation

方法回調
實際的方法實現,元素是否有效返回true。第一個參數:當前值。第二個參數:已驗證的元素。第三個參數:參數。

+0

檢查此帖http:// stackoverflow。com/questions/11277901 /修復-a-delayed-callback-cause-false-errors-in-jquery-validation -W-jquery-mo – Agzam

+0

@Agzam,我不確定你給我看的是什麼,因爲它證明了我的點。檢查[該帖子]中的代碼(http://stackoverflow.com/questions/11277901/fixing-a-delayed-callback-causing-false-errors-in-jquery-validation-w-jquery-mo),你可以當需要通過驗證時,請參閱名爲'nameUnique'的變量將包含'true'。 – Sparky

+0

再次,對於我的情況只是一個簡單的函數返回false或true不夠充分,我需要返回回調的東西,並取決於該回調設置屬性是否有效 – Agzam