我正在尝试正确验证和重置表单。验证工作正常——成功监控了所需的字段。但是,当我去重置我的表单时——我只看到我的输入的红色背景清晰,而不是验证消息。
根据jQuery 验证文档:
将输入字段重置为其原始值(需要表单插件),删除指示无效元素的类并隐藏错误消息。
这是我认为与该问题相关的所有信息。如果您还想看其他内容,请告诉我。
这是我在模型中生成 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();