11

我正在尝试正确验证和重置表单。验证工作正常——成功监控了所需的字段。但是,当我去重置我的表单时——我只看到我的输入的红色背景清晰,而不是验证消息。

根据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();
4

5 回答 5

2

为什么不在字段更改后立即触发元素验证

$('#myFormId input').on('change', function(){
    validator.element($(this));
});
于 2014-10-15T10:17:38.230 回答
0

我认为您可以将其添加到您的解决方法中:

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

问候

于 2013-10-14T16:46:12.650 回答
0

到目前为止给出的答案的唯一问题是所有错误都消失了,而不仅仅是您想要的错误。我在获取地址时遇到了类似的问题,如果状态是 DC,我需要输入象限(NW,NE,SW,SE)。我使用 jquery 添加和删除要求,然后将 @Html.ValidationMessageFor() 包装在 div 中,然后在选择不同状态时简单地隐藏 div。

于 2015-03-09T13:15:19.700 回答
0

你在下面使用,对吗?

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

那么你必须使用

form.resetForm();

重置表格,它将起作用。

于 2015-04-14T11:24:28.980 回答
0

尝试这个。

var validator = $( "#myform" ).validate();
validator.resetForm();
于 2018-11-05T08:11:48.723 回答