Ben*_*ter 13 jquery-validate unobtrusive-validation
我正在hijaxing现有的表单和POST到服务器.jQuery validate执行大部分验证,但如果验证在服务器上失败,我们将错误作为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>
Run Code Online (Sandbox Code Playgroud)
问题是如果POST成功,我似乎无法清除验证错误.我已经尝试过呼叫,validator.resetForm()但这没有区别,showError()呼叫添加的错误消息仍然显示.
注意我也使用jQuery.validate.unobtrusive插件.
小智 33
你刚刚发布了这个,我不知道你是否成功解决了这个问题?我遇到了与jQuery validate和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();
Run Code Online (Sandbox Code Playgroud)
注意:我使用$前缀表示变量来表示包含jQuery对象的变量.
| 归档时间: |
|
| 查看次数: |
19899 次 |
| 最近记录: |