2011-01-06 14 views
1

CompareValidatorにJS検証関数を追加することは可能ですか?
私はCustomValidatorを使用できません。私はこれが未解決であるので、あなたはまだそれを必要とするかどうか、私はしかし、ではないと仮定わからないCompareValidatorにJS検証を追加する

+0

どのような値を比較したいですか? –

+0

私は日付を比較したいが、アプリケーションは異なる日付形式を扱うことができるので、comparevalidatorは正しく動作していない。だから私は自分自身の検証機能を作ることができればもっと良いだろうと思う。私は現在、私の問題を解決するためにBaseValidatorをオーバーライドしていますが、このソリューションではすべてのページに戻り、バリデータの名前を変更する必要があります。 – scatman

+0

CustomValidatorを使用できないのはなぜですか?それは私たちがあなたを助けるのを助けるかもしれません。 – jcolebrand

答えて

0

...

さて、あなたはそれを直接行うことはできません、しかし、あなたは、元の関数を非表示にすることができますCompareValidatorの検証を担当し、新しいものを導入します。これは可能です。すべての検証関数は、グローバルスコープのASP.NETから来ています。議論の余地はありますが、その場合は参考になります。

次のモジュールを探してください。それはあなたに2つの方法を公開します。最初にと呼ばれるaddFunctionでは、カスタム検証のために1つ以上の関数を追加することができます。この関数は、ブールを返す必要があり、それは、それぞれ三つのパラメータバリデータオブジェクト対象物体CompareObjectを消費します。もう1つは、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(); 

が警告:デフォルトの検証スクリプトが既に整っていることを確認するためにページの一番下のどこかに、このモジュールを配置してください。また、モジュールを少し書き直して、ドキュメントの準備が整うまで初期化を遅らせることもできます。

+0

正確に何をしたのですか? – scatman

関連する問題