Javascript 为什么自定义验证器在jQuery的document.ready中不起作用
我在.NET上调用函数trought自定义验证器: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" > *&
<asp:CheckBox ID="chbNota" runat="server" />
<asp:CustomValidator ClientValidationFunction="RequiredPrivacy" Runat="server" ID="cvPrivacy" onservervalidate="CustomValidatorchkPrivacy_ServerValidate" > *</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;
}
});