【问题标题】:Why Custom Validator doesnt work in the document.ready of jQuery为什么自定义验证器在 jQuery 的 document.ready 中不起作用
【发布时间】:2011-06-20 13:26:12
【问题描述】:

我在 .NET 上通过我的自定义验证器调用了一个函数:

<asp:CheckBox ID="chbNota" runat="server" />
<asp:CustomValidator ClientValidationFunction="RequiredPrivacy" Runat="server" ID="cvPrivacy" onservervalidate="CustomValidatorchkPrivacy_ServerValidate" >&nbsp;*</asp:CustomValidator>

现在,如果我将函数声明为 $(document).ready(function() 为:

$(document).ready(function() {
    function RequiredPrivacy(oSrc, args) {
        if (!$('#<%=chbNota.ClientID%>').prop("checked")) args.IsValid = false;
    }
});

客户端的整个验证器变为 true。

为什么会有这种行为?如果我将该函数从 $(document).ready(function() 中移出,那么一切都可以正常工作...

【问题讨论】:

    标签: javascript jquery .net asp.net


    【解决方案1】:

    当您在“就绪”处理程序中定义函数时,它会在全局范围内隐藏。换句话说,它就像一个仅用于处理函数的局部变量。

    无需定义旨在在“就绪”处理程序中全局可见的函数。但是,如果您真的想要这样做,您可以这样做:

    $(document).ready(function() {
        window['RequiredPrivacy'] = function(oSrc, args) {
            if (!$('#<%=chbNota.ClientID%>').prop("checked")) args.IsValid = false;
        }
    });
    

    【讨论】:

    • 嗯...不明白你的意思.. :)
    • 看代码。 “就绪”处理程序是一个函数,对吧?好吧,当您在一个函数inside 中定义另一个函数时,它是该外部函数的本地函数。它不能被其他代码看到。它就像 C# 方法中的局部变量。
    • 好吧,我不知道;我不太了解 ASP 验证机制。因为尝试调用该函数会导致 JavaScript 错误,所以库可能就是这样做来处理它的。只是猜测。
    【解决方案2】:

    函数必须在全局命名空间中声明。当您将函数放在 $(document).ready 中时,它会限定函数范围并阻止内置的 CustomValidator javascript 挂钩找到该函数。

    【讨论】:

      猜你喜欢
      • 2017-11-26
      • 1970-01-01
      • 2019-02-12
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多