2013-01-21 71 views
0

我遇到了一些嚴重問題。我有這樣的兩個領域,他們都被分配與jQuery的日期選擇器。使用CustomValidator的ClientValidationFunction驗證文本框未觸發

<asp:TextBox ID="RTRP" runat="server" CssClass="textEntry" Width="120"></asp:TextBox> 
<asp:CustomValidator runat="server" ID="CustomValidator3" 
    ControlToValidate="RTRP" 
    Text="No date selected" 
    ValidateEmptyText="True" 
    ClientValidationFunction="clientValidate" 
    Display="Static"> 
</asp:CustomValidator> 
<asp:TextBox ID="ContEd" runat="server" CssClass="textEntry" Width="120"></asp:TextBox> 
<asp:CustomValidator runat="server" ID="CustomValidator1" 
    ControlToValidate="ContEd" 
    Text="No date selected" 
    ValidateEmptyText="True" 
    ClientValidationFunction="clientValidate" 
    Display="Static"> 
</asp:CustomValidator> 

用以下javascript來驗證它。

$("#<%=RTRP.ClientID %>").datepicker(); 
$("#<%=ContEd.ClientID %>").datepicker(); 

function clientValidate(sender, args) { 
    args.IsValid = args.Value.length > 0; 
} 

都獲得他們的日期選擇器,但驗證功能只是拒絕被解僱,並始終允許表單提交。我完全迷失在這裏,我做錯了什麼?

回答

1

你正在檢查一個字符串的length小於0(什麼是不正確的)位置:

function clientValidate(sender, args) { 
    if (args.Value.length < 0) { 
     args.IsValid = false; 
    } else { 
     args.IsValid = true; 
    } 
} 

我不知道這是否是你想要的(你可以的simpy使用RequiredFieldValidator)但是...

function clientValidate(sender, args) { 
    args.IsValid = args.Value.length > 0; 
} 
+0

試過了,但它仍然似乎沒有觸發在所有。甚至試圖調用警報並更改另一個字段中的文本,但顯然它完全忽略了它。 –

+0

@JesusZamora:你的'TextBoxes'沒有'AutoPostBack =「true」'(默認是'false)',也許你想立即回發。 –

+0

剛剛嘗試過。不好。這只是無視它。 –

0

如果分配$ .datepicker()行爲的任何文字和運行頁面,你會找到在你重寫jQuery的日期選擇器有CSS設置顯示屏,文本框:無..使可能是自定義驗證無法獲取該文本框的原因...

0

你爲什麼不使用

<asp:RequiredFieldValidator id="id" controltovalidate="controlname" erormessage="please enter the dates"> 
</asp:RequiredFieldValidator> 

糾正我,我錯了,

+0

是的,這就是我會用到的,但後來我需要它能夠檢查複選框是否被選中才能繼續。不管怎麼說,還是要謝謝你。 –

0

改變你的方法this.and再試

function clientValidate(sender, args) 
{ 
    if(Page_ClientValidate()) 
    { 
    if (args.Value.length < 0) 
    { 
    args.IsValid = false; 
    } else 
    { 
    args.IsValid = true; 
    } 
    } 
} 
+0

'clientValidate'已經是事件處理程序,這將導致無限循環(imho)。 –