表单重置后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(); });
示例小提琴