11

フォームを適切に検証してリセットしようとしています。検証は正常に機能します。必要なフィールドは正常に監視されています。ただし、フォームをリセットすると、検証メッセージではなく、入力の赤い背景のみが明確に表示されます。

jQuery validate documentationによると:

入力フィールドを元の値にリセットし (フォーム プラグインが必要)、無効な要素を示すクラスを削除し、エラー メッセージを非表示にします。

これが、この問題に関連すると思われるすべての情報です。他に見たいものがあれば教えてください。

モデルでDOM要素を生成する方法は次のとおりです。この要素は検証が必要です:

//Model.ascx
<div class="detailsRow required">
    <%= Html.LabelFor(model => model.Site) %>
    <%= Html.DropDownListFor(model => model.SelectedSiteID, new SelectList(Model.Site, "Key", "Value"))%>
    <%= Html.ValidationMessageFor(model => model.SelectedSiteID)%>
</div>

//Model.cs
[DisplayName("Site")]
public List<KeyValuePair<int, string>> Site { get; set; }

[Range(0, int.MaxValue, ErrorMessage = "Site required")]
public int SelectedSiteID { get; set; }

サイトは、値 -1 で始まる選択リストです。その他の選択は有効です。そのため、0 から最大までの範囲で検証します。

JavaScript では、ユーザーがフォームの [送信] ボタンを押したときに、フォームに対して次のコードを実行します。

var form = workflowDialogContent.find('form');
$.validator.unobtrusive.parse(form);
//Maintain a reference to the current formValidator to be able to reset.
var formValidator = $.data(form[0], 'validator');

if (form.valid()) {
}

ユーザーが送信を押すと、フォームが検証され、選択したサイトの値が -1 の場合、検証メッセージが表示されます。

今、選択が変更されるたびに、フォームをリセットしたいと思います。このロジックは次から取得しました: Jquery 検証エラー メッセージをクリアするにはどうすればよいですか?

$(window).on('change', '#SelectedSiteID', function () {
    //Returns the formValidator we maintained a reference to.
    var validator = WorkflowDialogBuilder.getCurrentFormValidator();
    validator.resetForm();
    //TODO: resetForm's documentation says that it hides the errors, but I did not experience this, so I am doing it manually.
    //$('.field-validation-error').empty();
}

ただし、このコードを実行すると... 強調表示は削除されますが、エラー メッセージは残ります。コメントされたコードのビットを呼び出すと、検証エラーは非表示になりますが、次回フォームが検証されたときに再度表示されることはありません。

検証後: ここに画像の説明を入力 resetForm の呼び出し後: ここに画像の説明を入力

なぜ私はそのような行動を見ているのでしょうか?

更新:回避策として、次のコードは適切なクリーンアップを行うようです:

$('.field-validation-error').empty();
4

5 に答える 5

0

これまでの回答の唯一の問題は、必要なエラーだけでなく、すべてのエラーがなくなることです。住所を取得する際に同様の問題があり、州が DC の場合、象限 (NW、NE、SW、SE) のエントリが必要です。jquery を使用して要件を追加および削除し、@Html.ValidationMessageFor() を div でラップします。次に、別の状態が選択されたときに div を非表示にします。

于 2015-03-09T13:15:19.700 に答える
0

これを回避策に追加できると思います:

var form = $("#MyFormId");
form.find(':input').removeClass("input-validation-error");

よろしく

于 2013-10-14T16:46:12.650 に答える
0

以下を使用していますよね?

var form = workflowDialogContent.find('form');

次に、使用する必要があります

form.resetForm();

フォームをリセットするには、機能します。

于 2015-04-14T11:24:28.980 に答える