函数必须在全局命名空间中声明。当您将函数放置在$(document).ready中时,它会确定函数的范围,并阻止内置的CustomValidator javascript挂钩查找该函数。
我调用了一个函数,打开了我的自定义验证器。NET:
<asp:CheckBox ID="chbNota" runat="server" />
<asp:CustomValidator ClientValidationFunction="RequiredPrivacy" Runat="server" ID="cvPrivacy" onservervalidate="CustomValidatorchkPrivacy_ServerValidate" > *</asp:CustomValidator>
现在,如果我将函数声明为$(document).ready(function):
$(document).ready(function() {
function RequiredPrivacy(oSrc, args) {
if (!$('#<%=chbNota.ClientID%>').prop("checked")) args.IsValid = false;
}
});
客户端的整个Validator变为true。
为什么会有这种行为?如果我把这个函数从$(document).ready(function)中移出,所有函数都能完美地工作。。。
当您在"ready"处理程序中定义函数时,它在全局范围中是隐藏的。换句话说,它就像一个只用于处理程序函数的局部变量。
不需要定义在"就绪"处理程序中全局可见的函数。然而,如果你真的想这样做,你可以这样做:
$(document).ready(function() {
window['RequiredPrivacy'] = function(oSrc, args) {
if (!$('#<%=chbNota.ClientID%>').prop("checked")) args.IsValid = false;
}
});