2010-05-26 50 views
20

如何通過JavaScript重置一個asp.net驗證控件?當前的代碼示例清除錯誤消息文本,但不會重置下一個表單提交的驗證控件。通過javascript重置一個asp.net驗證控件?

var cv= document.getElementById("<%= MyValidationContorl.ClientID %>"); 
cv.innerHTML = ''; 

更新:

這裏是形式的完整代碼示例。我似乎無法得到驗證控件火過上另一種形式提交:

function ClearData() { 
    var cv = document.getElementById("<%= MyValidationContorl.ClientID %>"); 
    cv.innerHTML = ''; 
} 

<html> 
    <form> 
     <asp:TextBox id="MyTextControl" runat="server" /> 
     <asp:CustomValidator ID="MyValidationContorl" runat="server" /> 
     <input type="button" onclick="javascript:ClearCCData(); return false;" runat="server" /> 
    </form> 
</html> 
+0

你說的復位是什麼意思? – azamsharp 2010-05-26 18:54:53

+0

@azamsharp - 我的意思是從一開始就啓動驗證過程。 – 2010-05-26 18:59:26

回答

-1

這裏的代碼,可以將所有驗證

function CleanForm() { 
    document.forms[0].reset(); 

    for (i = 0; i < Page_Validators.length; i++) { 
     Page_Validators[i].style.visibility = 'hidden'; 
    } 

    return false; 
} 

或單一的一個:

document.getElementById("<%= MyValidationContorl.ClientID %>").style.visibility 
= 'hidden'; 
+0

這沒有幫助。 – 2010-05-26 19:04:28

+0

哎呀抱歉想念你的目標 – Glennular 2010-05-26 19:11:31

+0

它隱藏了驗證控件,但是當我嘗試另一個表單提交時,它不會再次觸發驗證控件。 – 2010-05-26 19:20:45

38

頁面驗證每次你發佈帖子時都會被解僱,看來問題是你正在清除驗證器內容cv.innerHTML = '';,這樣你的驗證器信息就會永遠丟失,你會認爲驗證不會再次發射。

和@Glennular回答,代碼不處理驗證Display屬性,如果其設置爲Dynamic驗證器會使用validator.style.display進行切換,但如果其設置爲NoneInline然後validator.style.visibility財產將被用來代替。

其更好地使用asp.net ValidatorUpdateDisplay代替,

<script type="text/javascript"> 
    function Page_ClientValidateReset() { 
     if (typeof (Page_Validators) != "undefined") { 
      for (var i = 0; i < Page_Validators.length; i++) { 
       var validator = Page_Validators[i]; 
       validator.isvalid = true; 
       ValidatorUpdateDisplay(validator); 
      } 
     } 
    } 
</script> 

更新:重置驗證摘要

<script type="text/javascript"> 
function Page_ValidationSummariesReset(){ 
    if (typeof(Page_ValidationSummaries) == "undefined") 
      return; 
    for (var i = 0; i < Page_ValidationSummaries.length; i++) 
      Page_ValidationSummaries[i].style.display = "none"; 

} 
</script> 
+0

這個javascript函數很棒! – 2011-02-16 15:51:20

+0

嗨@MK ..你的功能很好..它重置所有的驗證器,因爲我想要的但它不重置驗證總結。你有任何可能做這項工作的代碼嗎?非常感謝。我非常需要它。 – lawphotog 2013-04-24 11:17:12

+0

@LaurenceNyein我更新了答案以包含重置驗證摘要方法。 – 2013-05-01 14:09:27

0

嘗試下面的代碼塊:

$("#<%= txtUserSettingsEmailRequiredValidator.ClientID %>").css("display", "none"); 

我希望這會在它工作的時候起作用我。 :)

13

這一個重置所有驗證組中的所有驗證器。

<script type="text/javascript"> 
    Page_ClientValidate(''); 
</script> 
+3

完美,正是我所需要的 – setebos 2012-05-08 10:14:18

+2

如果你使用這個,確保你有一個爲所有驗證器定義的ValidationGroup,否則它將觸發沒有組的驗證器。如果你真的懶惰,不想爲每個元素定義一個驗證組,你可以組成一個不會被用作驗證組的類似的隨機字符串:'Page_ClientValidate('reset-all'); ' – 2013-09-11 15:14:18

+0

空字符串會觸發所有驗證器。 – kerem 2013-09-12 06:35:37

-3

使用Page_Validators[i].style.visibility = 'hidden'; 不要爲我工作,所以我使用這行代碼,而不是:Page_Validators[i].enabled = false;

if (sFirstName == "" && sLastName == "") 
    { 

     alert('Reminder: Please first enter student ID to search for the student information before filling out the rest of the form field values'); 
     //Disable all require field validation coontrol on the form so the user could continue to use the Lookup student function. 
     document.forms[0].reset(); 
     for (i = 0; i < Page_Validators.length; i++) { 
      //Page_Validators[i].style.visibility = 'hidden'; 
      Page_Validators[i].enabled = false; 
     } 
     return false; 
    } 
    else 
    { 
     alert('Student Name = ' + sFirstName + ' ' + sLastName); 
     document.forms[0].reset(); 

     for (i = 0; i < Page_Validators.length; i++) { 
      //Page_Validators[i].style.visibility = 'hidden'; 
      Page_Validators[i].enabled = true; 
     } 
     return true; 
    }