表单重置后JQueryvalidation无法正常工作

使用以下命令重置表单后出现问题:

$(".cancel").click(function () { validator.resetForm(); $(':input', '#MyForm') .not(':button, :submit, :reset, :hidden') .val('') .removeAttr('checked') .removeAttr('selected'); //OR document.getElementById('MyForm').reset(); }); 

当我再次点击“保存”时,不再需要必填字段,表单会回发。 即使重置后,如何让表单重新validation?

这是一个简单的例子,因为我只是重置validation和表单,但在其他页面上我必须手动操作某些字段,所以我需要这种方式重置表单才能工作。

这是一个MVC创建的表单,如果这有任何区别

有什么建议?

编辑:经过一些试验和错误,似乎问题不应该与直接resetForm代码,而是其他东西。

在控制台中,我收到以下javascript错误:

 SyntaxError: invalid label 

和一个警告

 Use of attributes' specified attribute is deprecated. It always returns true. 

不确定它们是否与我的问题有关,但不确定此时还有什么可做的。

至于我正在使用的脚本:

 @Scripts.Render("~/bundles/modernizr") @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/Scripts/jquery-1.8.3.min.js") @*@Scripts.Render("~/Scripts/jquery-1.9.1.min.js")*@ @Scripts.Render("~/Scripts/jquery-ui-1.9.2.js") @Scripts.Render("~/Scripts/jquery.validate.js") @Scripts.Render("~/Scripts/jquery-validate-messages.js") @Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") @Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.js") @Scripts.Render("~/Scripts/jquery.jeditable.mini.js") @Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.editable.js") @Scripts.Render("~/Scripts/DataTables-1.9.4/extras/TableTools/media/js/TableTools.js") @Scripts.Render("~/Scripts/Countdown.js") @Styles.Render("~/Scripts/DataTables-1.9.4/media/css/jquery.dataTables.css") @RenderSection("scripts", required: false) 

1.9.1被注释掉了,因为它在第一次JQuery调用时打破了。 这有关系吗?

尝试使用以下方法再次设置validation:

 $j.validator.unobtrusive.parse('#MyForm'); 

编辑

您可以尝试使用重置按钮重置表单,将其放在表单中:

  

并在.cancel上禁用您的事件处理程序。 或者将其更改为:

 $('.cancel').click(function () { $('.reset-button').click(); }); 

如果您不想显示,请隐藏重置按钮。

找到一种方法强制它在提交时重新validation:

 $(".cancel").click(function () { $('#FormId')[0].reset(); validator.resetForm(); }); $("#submitForm").click(function () { if ($("#FormId").valid()) { $("#FormId").submit(); } }); 

现在我不再依赖表单的提交function来触发validation,而是我自己触发它。

我不知道为什么你以这种方式重置表单,但只需重置就可以正常工作。 Jquery有一个本机重置

  $(".cancel").click(function () { $('#FormId')[0].reset(); }); 

并且validation保持平稳

请尝试以下方法:

 var validator = $("#FormId").validate(); $(".cancel").click(function () { $('#FormId')[0].reset(); validator.resetForm(); }); 

示例小提琴