如何清除jQueryvalidation错误消息?
我正在使用jQueryvalidation插件进行客户端validation。 点击“编辑用户”button,调用editUser()
函数,显示错误信息。
但是我想清除我的表单上的错误消息,当我点击“清除”button,调用一个单独的函数clearUser()
。
function clearUser() { // Need to clear previous errors here } function editUser(){ var validator = $("#editUserForm").validate({ rules: { userName: "required" }, errorElement: "span", messages: { userName: errorMessages.E2 } }); if(validator.form()){ // Form submission code } }
你需要resetForm()
方法:
var validator = $("#myform").validate( ... ... ); $(".cancel").click(function() { validator.resetForm(); });
我从其中一个演示的源头抓取它。
注意:这段代码不适用于Bootstrap 3。
我自己遇到这个问题。 我需要有条件地validation窗体的一部分,而窗体是基于步骤构build的(即某些input在运行时dynamic添加)。 因此,有时select下拉列表需要validation,有时候不会。 然而,在考验结束之前,这需要得到validation。 因此,我需要一个健全的方法,这不是一个解决方法。 我咨询了jquery.validate
的源代码。
这是我想出来的:
这是代码中的样子:
function clearValidation(formElement){ //Internal $.validator is exposed through $(form).validate() var validator = $(formElement).validate(); //Iterate through named elements inside of the form, and mark them as error free $('[name]',formElement).each(function(){ validator.successList.push(this);//mark as error free validator.showErrors();//remove error messages if present }); validator.resetForm();//remove error class on name elements and clear history validator.reset();//remove all error and success data } //used var myForm = document.getElementById("myFormId"); clearValidation(myForm);
缩小为jQuery扩展名:
$.fn.clearValidation = function(){var v = $(this).validate();$('[name]',this).each(function(){v.successList.push(this);v.showErrors();});v.resetForm();v.reset();}; //used: $("#formId").clearValidation();
如果你想简单地隐藏错误:
$("#clearButton").click(function() { $("label.error").hide(); $(".error").removeClass("error"); });
如果你指定了errorClass
,那么调用这个类来隐藏我上面使用的error
(默认)。
如果您以前没有将validation程序附加到表单中,可以直接调用
$("form").validate().resetForm();
作为.validate()
将返回您以前附加(如果你这样做)相同的validation器。
不幸的是,在许多情况下, validator.resetForm()
不起作用。
我有一个情况,如果有人在空白值的表单上点击“提交”,它应该忽略“提交”。 没有错误。 这很容易。 如果有人input部分值,并点击“提交”,它应该标记一些错误的字段。 但是,如果他们将这些值清除并再次点击“提交”,则应清除错误。 在这种情况下,出于某种原因,validation程序中的“currentElements”数组中没有元素,因此执行.resetForm()
完全没有任何作用。
有这个bug发布。
在他们解决这些问题之前,你需要使用Nick Craver的答案,而不是鹦鹉接受的答案。
如果你想这样做,而不使用一个单独的variables
$("#myForm").data('validator').resetForm();
如果你只想清除validation标签,你可以使用jquery.validate.js中的代码resetForm()
var validator = $('#Form').validate(); validator.submitted = {}; validator.prepareForm(); validator.hideErrors(); validator.elements().removeClass(validatorObject.settings.errorClass);
您可以使用:
$("#myform").data('validator').resetForm();
我想我们只需要inputinput来清理一切
$("#your_div").click(function() { $(".error").html(''); $(".error").removeClass("error"); });
对于那些使用下面的Bootstrap 3代码将清理整个forms:meassages,图标和颜色…
$('.form-group').each(function () { $(this).removeClass('has-success'); }); $('.form-group').each(function () { $(this).removeClass('has-error'); }); $('.form-group').each(function () { $(this).removeClass('has-feedback'); }); $('.help-block').each(function () { $(this).remove(); }); $('.form-control-feedback').each(function () { $(this).remove(); });
我testing了:
$("div.error").remove(); $(".error").removeClass("error");
这样可以,当你需要再次validation时。
var validator = $("#myForm").validate(); validator.destroy();
这将破坏所有validation错误
尝试使用这个删除点击取消validation
function HideValidators() { var lblMsg = document.getElementById('<%= lblRFDChild.ClientID %>'); lblMsg.innerHTML = ""; if (window.Page_Validators) { for (var vI = 0; vI < Page_Validators.length; vI++) { var vValidator = Page_Validators[vI]; vValidator.isvalid = true; ValidatorUpdateDisplay(vValidator); } } }
尝试使用:
onClick="$('.error').remove();"
清除button上。
要删除validation摘要,你可以写这个
$('div#errorMessage').remove();
但是,一旦你删除,再次如果validation失败,它不会显示此validation摘要,因为你删除它。 而是使用下面的代码隐藏和显示
$('div#errorMessage').css('display', 'none'); $('div#errorMessage').css('display', 'block');
上述解决scheme都不适合我。 我浪费时间在他们身上感到失望。 但是有一个简单的解决scheme。
解决scheme是通过比较有效状态的HTML标记和错误状态的HTML标记来实现的。
没有错误会产生:
<div class="validation-summary-valid" data-valmsg-summary="true"></div>
当发生错误时,这个div会填充错误,类将更改为validation-summary-errors:
<div class="validation-summary-errors" data-valmsg-summary="true">
解决scheme非常简单。 清除包含错误的div的HTML,然后将该类更改回有效状态。
$('.validation-summary-errors').html() $('.validation-summary-errors').addClass('validation-summary-valid'); $('.validation-summary-valid').removeClass('validation-summary-errors');
快乐的编码。
如果你想重置numberOfInvalids()
,那么在jquery.validate.js
文件行号:415的resetForm
函数中join如下一行:
this.invalid = {};
我已经做了
$('.input-validation-error').removeClass('input-validation-error');
删除input错误字段的红色边框。
$(FORM_ID).validate().resetForm();
仍然没有按预期工作。
我正在用resetForm()
清除表单。 它在所有情况下工作,除了一个!
当我加载任何forms通过Ajax和加载我的dynamicHTML
后应用表单validation,然后当我尝试用resetForm()
重置表单,并且它失败,也刷新了我在表单元素上应用的所有validation。
所以请不要使用Ajax加载的表单或手动初始化validation。
PS你需要使用Nick Craver的回答来解释这种情况。