2012-07-27 46 views
1

我目前使用的是使用JavaScript來驗證/或文本框中有數字的CustomValidator。當我滿足驗證錯誤時,消息在提交之前不會清除。我該如何解決這個問題,使其像我的其他開箱驗證器一樣清除?我在C#中使用ASP.NET。如何擁有一個CustomValidator(使用JS)驗證OnBlur或OnChange

 <script type="text/javascript"> 

       function testnumbers(source, args) { 
        var s1 = document.getElementById('<%=arubaBox.ClientID%>').value; var s2 = document.getElementById('<%=shipBox.ClientID%>').value; 


        if (s1 == "" && s2 == "") 

         args.IsValid = false; 
        else if (s1 == "" && s2 != "") 

         args.IsValid = true; 
        else if (s1 != "" && s2 == "") 

         args.IsValid = true; 
        else if (s1 != "" && s2 !== "") args.IsValid = true; 

       } 

     </script> 



    <asp:TextBox ID="aBox" runat="server" MaxLength="7"></asp:TextBox> 



    <asp:CustomValidator 
    ID="CustomValidator1" runat="server"      ClientValidationFunction="testnumbers" 
    ErrorMessage="CustomValidator" 
    ValidationGroup="Contact" 
    Text=" Please provide A # or Shipping Account #" 
    CssClass="errormessage" 
    Display="Dynamic" > 
    </asp:CustomValidator> 

&nbsp<asp:RegularExpressionValidator 
     id="RegularExpressionValidator1" 
     runat="server" 
     ErrorMessage="Field not valid!" 
     ControlToValidate="aBox" 
     ValidationExpression="[0-9a-zA-Z]{5,}" 
     ValidationGroup="Contact" 
     />&nbsp 

<asp:RegularExpressionValidator 
    ID="NumErrAru" 
    runat="server" 
    ControlToValidate="aBox" 
    CssClass="errormessage" 
    ErrorMessage=" Numbers Only" 
    ValidationExpression="^[0-9]+$" 
    ValidationGroup="Contact" 
    Display="Dynamic" 
    Text=" Numbers Only"> 
    </asp:RegularExpressionValidator> 

回答

1

您可以同時使用Page_ClientValidate方法和Page_Validators採集控制你的頁面驗證:

function jsValidation(){ 
    Page_ClientValidate(); 
    $.each(Page_Validators, function(key, value) { 
     if(value.IsValid == false) { 
      //- error in validation, locate failing input control 
      var oE = value.ControlToValidate; 
      //- you can for example set focus back to it, if needed 
      oE.focus(); 
     } 
    }); 
} 

使用blur事件中調用函數時,元素失去焦點:

$('#<%=element.ClientID%>').blur(function() { jsValidation(); }); 

這實現使用jQuery,並沒有經過測試,但應該工作得很好。 ,你也可以簡單地刪除jQuery交互,並根據需要使用經典的js。

希望這會有所幫助。

+0

謝謝您的答覆。我一直試圖讓它在過去一小時內工作,我相信它是我而不是你的代碼。但我無法去工作。 controltovalidate是<%= abox.ClientID%>。你可能可以插入我需要從上面的代碼,所以我可以看到它是如何工作 – jackncoke 2012-07-27 17:43:07

+0

拉爾夫,這只是一個樣本...肯定如果你想檢查模糊abox控制,那麼你應該使用abox。客戶端ID。然後驗證發生在整個頁面上,然後會在for-each循環期間爲您提供所有無法驗證的控件。如果你有麻煩,你也可以看看http://stackoverflow.com/questions/969465/problem-with-page-clientvalidate或http://stackoverflow.com/questions/5486620/page-clientvalidate-object-expected -error-着找到的最驗證 – 2012-07-30 06:27:23