Search code examples
c#javascriptvalidationcomparevalidator

Adding JS Validation on CompareValidator


is it possible to add a JS validation function for CompareValidator?
i can't use a CustomValidator.


Solution

  • I'm not sure whether you still need it or not, I assume not however since this is unanswered...

    Well, you can't do it directly, however you can hide original function which is responsible for CompareValidator validation and introduce new one. This is possible because all validation functions comes from ASP.NET in global scope which is... controversial, but helpful in that case.

    Please find following module which get the job done. It exposes you two methods. First called addFunction allows you to add one or more functions for custom validation. This function should returns Boolean and it consumes three parameters Validator object , TargetObject and CompareObject respectively. Second one called disableOldFunction allows you to completely get rid of old validation function which is called by the module if all your functions are valid.

        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;
        } ();
    

    Example usage:

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

    Caveat: Please place this module somewhere on the page bottom to be sure that default validation scripts are in place already. You can also rewrite module a bit to defer initialization until document will be ready.