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