【问题标题】:Adding JS Validation on CompareValidator在 CompareValidator 上添加 JS 验证
【发布时间】:2011-01-06 10:03:50
【问题描述】:

是否可以为 CompareValidator 添加 JS 验证功能?
我不能使用 CustomValidator。

【问题讨论】:

  • 你想比较什么值?
  • 我想比较日期,但由于应用程序可以处理不同的日期格式,comparevalidator 无法正常工作。所以我想如果我可以创建自己的验证功能会更好。我目前正在重写 BaseValidator 来解决我的问题,但是使用此解决方案我应该返回每个页面并重命名验证器..
  • 为什么不能使用 CustomValidator?这可能会帮助我们更好地帮助您。

标签: c# javascript validation comparevalidator


【解决方案1】:

我不确定你是否仍然需要它,但我认为不需要,因为这没有答案......

好吧,你不能直接这样做,但是你可以隐藏负责 CompareValidator 验证的原始函数并引入新函数。这是可能的,因为所有验证函数都来自全局范围内的 ASP.NET,这是……有争议的,但在这种情况下很有帮助。

请找到以下模块来完成工作。它向您展示了两种方法。首先调用 addFunction 允许您添加一个或多个函数以进行自定义验证。此函数应返回 Boolean 并分别使用三个参数 Validator objectTargetObjectCompareObject。第二个称为 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();

警告:请将此模块放置在页面底部的某个位置,以确保默认验证脚本已经到位。您还可以稍微重写模块以推迟初始化,直到文档准备好。

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    相关资源
    最近更新 更多