Javascript 有没有办法完全重置带有标注的asp.net验证程序?

Javascript 有没有办法完全重置带有标注的asp.net验证程序?,javascript,asp.net,validation,webforms,Javascript,Asp.net,Validation,Webforms,我有一个web表单,我希望用户能够重置表单,而无需完整发帖(我知道这是最简单的方法) 我使用的是带有标注的asp.net验证程序,没有什么特别的 <asp:TextBox ID="txtWarranty" MaxLength="50" runat="server" /> <asp:RequiredFieldValidator ID="rfvWarrantyID" runat="server" Display="None" ControlToValidate="txtWa

我有一个web表单,我希望用户能够重置表单,而无需完整发帖(我知道这是最简单的方法)

我使用的是带有标注的asp.net验证程序,没有什么特别的

<asp:TextBox ID="txtWarranty" MaxLength="50" runat="server" />
<asp:RequiredFieldValidator ID="rfvWarrantyID" runat="server" Display="None"
    ControlToValidate="txtWarranty" ErrorMessage="Warranty ID is required"></asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="vceWarrantyID" HighlightCssClass="wpcf7-not-valid" TargetControlID="rfvWarrantyID"
    runat="server" />

当用户重置表单时,我希望清除所有字段并重置所有验证器。它在很大程度上起作用

function ResetWarrantyForm() {
    document.forms[0].reset();
    ClearValidation();
}
function ClearValidation() {
    var validators = window.Page_Validators;
    for (var i = 0; i < validators.length; i++) {
        validators[i].IsValid = true;
        window.ValidatorUpdateDisplay(validators[i]);
        try {
            var callOutId = validators[i].ValidatorCalloutBehavior._id;
            var callOut = window.$find(callOutId);
            if (callOut)
                callOut.hide();
        }
        catch (e) { }
        validators[i].IsValid = true;
        window.ValidatorUpdateDisplay(validators[i]);
    }
    if (typeof (window.Page_ValidationSummaries) != "undefined") { //hide the validation summaries  
        for (var sums = 0; sums < window.Page_ValidationSummaries.length; sums++) {
            var summary = window.Page_ValidationSummaries[sums];
            summary.style.display = "none";
        }
    }
    $("input[type='text'], select").removeClass("wpcf7-not-valid").removeClass("comboboxNotValid");
}
函数重置担保形式(){
document.forms[0].reset();
ClearValidation();
}
函数ClearValidation(){
var validators=window.Page_validators;
对于(var i=0;i
问题在于,一旦对验证进行了评估。输入设置为焦点验证。因此,当表单重置时,用户单击文本框。他们被立即告知他们的输入无效,即使他们还没有做任何事情

在第一次页面加载时,只有单击按钮,字段才会生效。但在第一个按钮之后,单击“聚焦”和“模糊”字段


有没有办法像第一次加载一样重置该行为?

您可以使用javascript重置验证器

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

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

    return false;
}
函数重置验证器(){
document.forms[0].reset();
对于(i=0;i
我最终添加了这个javascript函数

function ClearValidation() {
    //reset the form
    document.forms[0].reset();
    //get all the validators
    var validators = window.Page_Validators;
    for (var i = 0; i < validators.length; i++) {
        validators[i].IsValid = true;
        window.ValidatorUpdateDisplay(validators[i]);
        //Clear out all the callouts and hide them
        try {
            var callOutId = validators[i].ValidatorCalloutBehavior._id;
            var callOut = window.$find(callOutId);
            if (callOut)
                callOut.hide();
        }
        catch (e) { }
        // I can't remember why I repeated this code, not sure if necessary
        validators[i].IsValid = true;
        window.ValidatorUpdateDisplay(validators[i]);
    }
    // hide the summary
    if (typeof (window.Page_ValidationSummaries) != "undefined") { //hide the validation summaries  
        for (var sums = 0; sums < window.Page_ValidationSummaries.length; sums++) {
            var summary = window.Page_ValidationSummaries[sums];
            summary.style.display = "none";
        }
    }
    // remove the error class that I set in the callout server control
    $("input[type='text']").removeClass("wpcf7-not-valid");
    $("select").removeClass("wpcf7-not-valid");
}
函数ClearValidation(){
//重新设置表单
document.forms[0].reset();
//获取所有的验证器
var validators=window.Page_validators;
对于(var i=0;i
不幸的是,由于验证器调用,这在这种情况下不起作用。您有解决方案吗?我也面临着同样的问题。@RickJackson,我不记得我是否让它完全按照我希望的那样工作,但我发布了我创建的函数,以尽可能接近它。你可以在下面看到我的答案。