2011-06-20 44 views
2

的的document.ready自定義驗證器不工作我調用一個函數trought在.NET我自定義的驗證:爲什麼jQuery中

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

現在,如果我聲明函數到$(文件)。就緒(函數()爲:

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

客戶端上的整個驗證至真

爲什麼這種行爲如果我動議功能了$(文件)。就緒的(函數()所有的工作完美? ..

回答

2

當您在「就緒」處理程序中定義函數時,它將隱藏在全局範圍內。換句話說,它就像處理函數的局部變量。

沒有必要定義旨在在「就緒」處理程序內全局可見的函數。如果你真的想,但是,你可以這樣做:

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

呃...不知道明白你的意思.. :) – markzzz

+1

看看代碼。 「ready」處理程序是一個**函數**,對嗎?那麼,當你在一個函數裏面定義另一個函數*時,它就是該函數的局部。它不能被其他代碼看到。它就像C#方法中的局部變量。 – Pointy

+0

真:)但爲什麼驗證器返回true?事實上,它不應該返回任何東西...... – markzzz

1

該功能必須在全局命名空間中聲明。將函數放置在$(document).ready中時,它將函數的範圍限制在內,並防止內置的CustomValidator JavaScript鉤子找到該函數。