我hijaxing现有形式发送到服务器。 jQuery验证完成大部分的验证,但如果验证服务器上失败,我们返回的错误到客户端为JSON。
下面是做的代码:
<script type="text/javascript">
$(function () {
$("form").submit(function (e) {
var $form = $(this);
var validator = $form.data("validator");
if (!validator || !$form.valid())
return;
e.preventDefault();
$.ajax({
url: "@Url.Action("index")",
type: "POST",
data: $form.serialize(),
statusCode: {
400: function(xhr, status, err) {
var errors = $.parseJSON(err);
validator.showErrors(errors);
}
},
success: function() {
// clear errors
// validator.resetForm();
// just reload the page for now
location.reload(true);
}
});
});
});
</script>
问题是,我似乎无法清除验证错误如果POST成功。 我已经打过电话validator.resetForm()
但这并没有区别,所添加的错误信息showError()
调用,仍然显示。
请注意我还使用了jQuery.validate.unobtrusive插件。
您刚才发布的这个,我不知道,如果你设法解决它? 我与jQuery验证和jQuery.validate.unobtrusive插件同样的问题。
检查源代码和一些调试后,我来到了这个问题来自于不显眼的插件处理错误消息的方式结束。 它消除了errorClass
的jQuery.validate插件集,所以当表单被重置,jQuery验证找不到错误的标签去除。
我不想修改插件的代码,所以我能够以下列方式解决此问题:
// get the form inside we are working - change selector to your form as needed
var $form = $("form");
// get validator object
var $validator = $form.validate();
// get errors that were created using jQuery.validate.unobtrusive
var $errors = $form.find(".field-validation-error span");
// trick unobtrusive to think the elements were succesfully validated
// this removes the validation messages
$errors.each(function(){ $validator.settings.success($(this)); })
// clear errors from validation
$validator.resetForm();
注意:我使用的变量$前缀表示包含的jQuery对象的变量。
可能是我错了,清除这样的错误:
function clearError(form) {
$(form + ' .validation-summary-errors').each(function () {
$(this).html("<ul><li style='display:none'></li></ul>");
})
$(form + ' .validation-summary-errors').addClass('validation-summary-valid');
$(form + ' .validation-summary-errors').removeClass('validation-summary-errors');
$(form).removeData("validator");
$(form).removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse($(form));
};
我试图通过AaronLS评论给出的答案,但没有得到解决,所以我只是不喜欢这样。
也许有帮助的人。
$( “#形式”)。找到( '现场验证,误差范围 ')。HTML('')
这是我结束了使用清除/重置所有错误代码。 这是可能有一些冗余在那里,但它为我工作。
function removeValidationErrors(frmId) { var myform = $('#' + frmId); myform.get(0).reset(); var myValidator = myform.validate(); $(myform).removeData('validator'); $(myform).removeData('unobtrusiveValidation'); $.validator.unobtrusive.parse(myform); myValidator.resetForm(); $('#' + frmId + ' input, select').removeClass('input-validation-error'); }
究其原因这仍是一个问题(甚至6年)是jQuery验证没有当你的表格是有效的事件处理程序; 仅当它是无效的。
不显眼的验证水龙头到无效的处理程序,以你的错误添加到您的验证摘要元素。 (具体而言,任何元素data-valmsg-summary=true
)。但是,因为没有有效的处理程序,有没有办法不显眼验证知道他们什么时候可以被清除。
然而,jQuery验证并允许你提供自己的showErrors
方法,这是每一个验证检查后调用,其结果是有效还是无效。 因此,您可以编写自定义函数,将清除这些验证摘要框,如果你的表格是有效的。
下面是将全局应用的样本。 (您可以通过使用其应用到你的校验具体情况settings
,但因为我总是想这个功能,我只是把它的defaults
的对象。)
$.validator.defaults.showErrors = function () {
if (!this.errorList.length) {
var container = $(this.currentForm).find("[data-valmsg-summary=true]");
container.find("ul").empty();
container.addClass("validation-summary-valid").removeClass("validation-summary-errors");
}
// Call jQuery Validation's default showErrors method.
this.defaultShowErrors();
};
这也具有清热验证摘要盒子的那一刻你的表格是有效的,而不必等待用户请求表单提交的好处。