Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么自定义验证器在jQuery的document.ready中不起作用_Javascript_Jquery_.net_Asp.net - Fatal编程技术网

Javascript 为什么自定义验证器在jQuery的document.ready中不起作用

Javascript 为什么自定义验证器在jQuery的document.ready中不起作用,javascript,jquery,.net,asp.net,Javascript,Jquery,.net,Asp.net,我在.NET上调用函数trought自定义验证器: <asp:CheckBox ID="chbNota" runat="server" /> <asp:CustomValidator ClientValidationFunction="RequiredPrivacy" Runat="server" ID="cvPrivacy" onservervalidate="CustomValidatorchkPrivacy_ServerValidate" >&nbsp;*&

我在.NET上调用函数trought自定义验证器:

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

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

$(文档).ready(函数(){
功能要求隐私(oSrc、args){
if(!$('#').prop(“选中”))args.IsValid=false;
}
});
客户端的整个验证器将变为true


为什么会出现这种行为?如果我将该函数从$(document).ready(function()中移出,所有函数都能很好地工作…

当您在“ready”处理程序中定义函数时,它会隐藏在全局范围之外。换句话说,它就像处理程序函数的局部变量一样

无需定义在“就绪”处理程序中全局可见的函数。但是,如果确实需要,可以执行以下操作:

$(document).ready(function() {
    window['RequiredPrivacy'] = function(oSrc, args) {
        if (!$('#<%=chbNota.ClientID%>').prop("checked")) args.IsValid = false;
    }
});
$(文档).ready(函数(){
窗口['RequiredPrivacy']=函数(oSrc,参数){
if(!$('#').prop(“选中”))args.IsValid=false;
}
});

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

嗯……不确定您的意思是什么……:)查看代码。“ready”handler是一个函数,对吗?嗯,当你在一个函数中定义另一个函数时,它是外部函数的局部函数。其他代码看不到它。它就像C#方法中的局部变量。我不知道,我对ASP验证机制知之甚少。因为尝试调用该函数会导致JavaScript错误,也许这就是图书馆处理它的方法。只是猜测而已。
$(document).ready(function() {
    window['RequiredPrivacy'] = function(oSrc, args) {
        if (!$('#<%=chbNota.ClientID%>').prop("checked")) args.IsValid = false;
    }
});