2

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");
}

問題は、検証が評価された後です。入力は、フォーカス時に検証するように設定されています。そのため、フォームがリセットされ、ユーザーがテキスト ボックスをクリックしたとき。まだ何もしていないにもかかわらず、入力が無効であることがすぐに通知されます。

最初のページの読み込みでは、ボタンがクリックされるまでフィールドは検証されません。ただし、最初のボタンをクリックした後、フィールドはフォーカスとぼかしで検証されます。

それが最初のロードであるかのようにその動作をリセットする方法はありますか?

4

2 に答える 2

0

JavaScript を使用してバリデーターをリセットできます。

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

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

    return false;
}
于 2013-09-25T19:40:23.957 に答える