2013-01-15 131 views
0

我在TextBox上有一個RequiredFieldValidator。當TextBox中沒有任何內容輸入時,這工作正常。現在,我做的另一個驗證是當用戶輸入一些垃圾數據時,我會拋出一個錯誤消息,說「無效輸入」。這是在標籤上。Javascript和必填字段驗證程序

現在情景是在拋出錯誤消息之後,如果用戶清空文本框並單擊按鈕,RequiredFieldValidator可以工作,但標籤上的錯誤消息仍然保持原樣。一旦用戶清空文本框,我想隱藏/刪除它。

爲此,我使用了一個JavaScript函數,但是這個RequiredFieldValidator不起作用。這裏是我的代碼:

<asp:TextBox ID="txtemp" runat="server"></asp:TextBox> 
<asp:Button ID="btnstatus" runat="server" ValidationGroup="valgrp1" OnClientClick="Validate()" 
    CausesValidation="true" onclick="btnstatus_Click" 
    Text="Fetch status message" BackColor="#ccebff" /> 
&nbsp; 
<asp:RequiredFieldValidator ID="Reqfield1" ControlToValidate="txtportalid" ValidationGroup="valgrp1" ErrorMessage="wrong entry" runat="server" /> 
</div> 
<div> 
    <asp:Label ID="lblerrormsg" runat="server" Font-Bold="true" Visible="false" ForeColor="#FF3300"> 
    </asp:Label> 
</div> 

的JavaScript:

function Validate() 
{ 
    var txt1 = document.getElementById("<%= Txtemp.ClientID %>"); 
    var val1 = txt1.value.replace(/\s/g, ""); 

    if (val1=="") 
    { 
     document.getElementById("<%= lblerrormsg.ClientID%>").style.display = 'none'; 
    } 
} 

回答

3

我建議使用CustomValidatorClientValidationFunction屬性設置爲指向像下面你Validate功能:

<script> 
    function Validate(source, arguments) { 
     arguments.IsValid = /* your validation logic */ 
    } 
</script> 

... 

<asp:CustomValidator ControlToValidate="txtportalid" 
    ErrorMessage="..." ClientValidationFunction="Validate" runat="server" /> 

...或者,在你的情況下,你可以使用RegularExpressionValidator。兩者都會給你你想要的行爲。

0

您可以使用jQuery來處理文本框的keyup事件。

下面的例子做兩兩件事:

  1. 每當一個按鍵上的文本框出現,請檢查文本框是否爲空
  2. 檢查錯誤標籤是否具有價值

如果兩項檢查都通過了,只需清除錯誤標籤!

ASPX:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Home</title> 
    <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#txtemp").keyup(function() { 
       if (!this.value) { 
        var errorMessage = $("#<%= lblErrorMessage.ClientID %>").length; 
        if (errorMessage) { 
         $("#<%= lblErrorMessage.ClientID %>").html(""); 
        } 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:TextBox ID="txtemp" runat="server" /> 
     <asp:Button ID="btnstatus" runat="server" ValidationGroup="valgrp1" CausesValidation="true" 
      OnClick="btnstatus_Click" Text="Fetch status message" /> 
     <asp:RequiredFieldValidator runat="server" ID="req" ValidationGroup="valgrp1" ControlToValidate="txtemp" 
      ErrorMessage="Field is required" /> 
     <asp:Label ID="lblErrorMessage" ClientIDMode="Static" runat="server" EnableViewState="false" /> 
    </div> 
    </form> 
</body> 
</html> 

後面的代碼(我剛剛創建用於測試的簡單方法):

protected void btnstatus_Click(object sender, EventArgs e) 
{ 
    if (txtemp.Text == "invalid") 
    { 
     lblErrorMessage.Text = "The data is invalid"; 
    } 
}