1

CompareValidator に JS 検証関数を追加することは可能ですか?
CustomValidator を使用できません。

4

1 に答える 1

0

まだ必要かどうかはわかりませんが、これは未回答なので必要ないと思います...

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

仕事を成し遂げる次のモジュールを見つけてください。2 つの方法を公開します。最初にaddFunctionを呼び出すと、カスタム検証用に 1 つ以上の関数を追加できます。この関数はブール値を返す必要があり、3 つのパラメーターValidator objectTargetObjectおよびCompareObjectをそれぞれ消費します。2 番目のものは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();

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

于 2011-11-12T19:25:31.310 に答える