2011-01-06 38 views
1

是否可以爲CompareValidator添加JS驗證函數?
我不能使用CustomValidator。在CompareValidator上添加JS驗證

+0

你想比較哪些值? – 2011-01-06 10:08:00

+0

我想比較日期,但由於應用程序可以處理不同的日期格式,所以comparevalidator無法正常工作。所以我想如果我可以創建我自己的驗證功能,它會好得多。我現在正在重寫BaseValidator來解決我的問題,但有了這個解決方案,我應該回到每個頁面並重命名驗證器。 – scatman 2011-01-06 10:20:47

回答

0

我不知道你是否還需要與否,我想不但是因爲這是沒有答案......

嗯,你不能這樣做直接,但您可以隱藏原來的函數,它是負責CompareValidator驗證並推出新的。這是可能的,因爲所有驗證函數都來自全球範圍內的ASP.NET,這是有爭議的,但在這種情況下很有幫助。

請找到以下模塊完成工作。它暴露你兩種方法。首先調用addFunction允許您爲自定義驗證添加一個或多個函數。這個功能應該返回布爾和消耗三個參數Validator對象TargetObject分別CompareObject。第二個名爲disableOldFunction允許您完全擺脫由模塊調用的舊驗證功能,如果您的所有功能都有效。

var MyModules = {}; 
    MyModules.CompareValExtension = function() 
    { 
     var functions = new Array(); 
     var oldFunc = null, disabled = false; 

     function myCompareValidatorEvaluateIsValid(val) 
     { 
      var valid = true; 
      if (oldFunc && functions.length) 
      { 
       for (i in functions) 
       { 
        valid = functions[i](val, document.getElementById(val.controltovalidate), document.getElementById(val.controltocompare)); 
        if (!valid) { break; } 
       } 
       if (!disabled && valid) 
       { 
        valid = oldFunc(val); 
       } 
      } 
      return valid; 
     } 

     if (typeof CompareValidatorEvaluateIsValid != 'undefined') 
     { 
      oldFunc = CompareValidatorEvaluateIsValid; 
      window.CompareValidatorEvaluateIsValid = myCompareValidatorEvaluateIsValid; 
     } 

     var me = {}; 
     me.addFunction = function (func) { if (typeof func == "function") { functions.push(func); } } 
     me.disableOldFunction = function() { disabled = true; } 
     return me; 
    }(); 

用法示例:

MyModules.CompareValExtension.addFunction(function (val, elem, comp) 
    { 
     return elem.value == "my value"; 
    }); 
    MyModules.CompareValExtension.disableOldFunction(); 

警告:請某處放置在頁面底部的此模塊,以確保默認的驗證腳本已經到位。您也可以稍微重寫模塊以推遲初始化,直到文檔準備就緒。