Как очистить сообщения об ошибках проверки JQuery? - PullRequest
159 голосов
/ 18 января 2010

Я использую плагин проверки jQuery для проверки на стороне клиента.Функция editUser() вызывается при нажатии кнопки «Редактировать пользователя», которая отображает сообщения об ошибках.

Но я хочу удалить сообщения об ошибках в моей форме, когда я нажимаю кнопку «Очистить», которая вызываетфункция 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
    }
}

Ответы [ 25 ]

193 голосов
/ 18 января 2010

Вы хотите метод resetForm():

var validator = $("#myform").validate(
   ...
   ...
);

$(".cancel").click(function() {
    validator.resetForm();
});

Я взял его из источника одного из их демо .

Примечание. Этот код не будет работать для Bootstrap 3.

122 голосов
/ 16 апреля 2013

Я сам столкнулся с этой проблемой. У меня была необходимость условно проверить части формы, пока форма строилась на основе шагов (то есть некоторые входные данные были динамически добавлены во время выполнения). В результате иногда выбранное раскрывающееся меню требует проверки, а иногда - нет. Однако, к концу испытания это должно было быть подтверждено. В результате мне понадобился надежный метод, который не был обходным путем. Я сверился с исходным кодом для 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();
56 голосов
/ 18 января 2010

Если вы хотите просто скрыть ошибки:

$("#clearButton").click(function() {
  $("label.error").hide();
  $(".error").removeClass("error");
});

Если вы указали errorClass, вызовите этот класс, чтобы скрыть error (по умолчанию), который я использовал выше.

35 голосов
/ 02 августа 2012

Если вы ранее не сохраняли валидаторы отдельно, прикрепляя их к форме, вы также можете просто вызвать

$("form").validate().resetForm();

as .validate() вернет те же валидаторы, которые вы добавили ранее (если вы это сделали).

19 голосов
/ 24 августа 2012

Если вы хотите сделать это без использования отдельной переменной, тогда

$("#myForm").data('validator').resetForm();
16 голосов
/ 05 октября 2012

К сожалению, validator.resetForm() не работает, во многих случаях.

У меня есть случай, когда, если кто-то нажимает кнопку «Отправить» в форме с пустыми значениями, он должен игнорировать «Отправить». Нет ошибок Это достаточно просто. Если кто-то вводит частичный набор значений и нажимает «Отправить», он должен пометить некоторые поля ошибками. Однако, если они стирают эти значения и снова нажимают «Отправить», это должно устранить ошибки. В этом случае по какой-то причине в массиве «currentElements» нет элементов в валидаторе, поэтому выполнение .resetForm() абсолютно ничего не делает.

На этом сайте опубликованы ошибки.

До тех пор, пока они их не исправят, вам нужно использовать ответ Ника Крейвера, а НЕ принятый ответ Попугаев.

6 голосов
/ 31 мая 2013

Вы можете использовать:

$("#myform").data('validator').resetForm();
5 голосов
/ 03 февраля 2013

Я думаю, нам просто нужно ввести данные, чтобы очистить все

$("#your_div").click(function() {
  $(".error").html('');
  $(".error").removeClass("error");
});
5 голосов
/ 06 ноября 2012

Если вы хотите просто очистить метки проверки, вы можете использовать код из jquery.validate.js resetForm ()

var validator = $('#Form').validate();

validator.submitted = {};
validator.prepareForm();
validator.hideErrors();
validator.elements().removeClass(validatorObject.settings.errorClass);
4 голосов
/ 28 июля 2015

Для тех, кто использует Bootstrap 3, приведенный ниже код будет очищать всю форму: сообщения, значки и цвета ...

$('.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(); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...