Как очистить сообщения об ошибках проверки jQuery?


Я использую плагин для проверки 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
    }
}
22 146

22 ответа:

вы хотите resetForm() способ:

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

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

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

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

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

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

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

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

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

    $("#myForm").data('validator').resetForm();
    

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

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

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

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

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

    $("#myform").data('validator').resetForm();
    

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

    var validator = $('#Form').validate();
    
    validator.submitted = {};
    validator.prepareForm();
    validator.hideErrors();
    validator.elements().removeClass(validatorObject.settings.errorClass);
    

    Я думаю, что нам просто нужно ввести входные данные для чистых все

    $("#your_div").click(function() {
      $(".error").html('');
      $(".error").removeClass("error");
    });
    

    для тех, кто использует Bootstrap 3 код ниже будет очистить всю форму: 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(); });
    

    проверил:

    $("div.error").remove();
    $(".error").removeClass("error");
    

    это будет нормально, когда вам нужно будет проверить его снова.

    var validator = $("#myForm").validate();
    validator.destroy();
    

    Это уничтожит все ошибки проверки

    попробуйте использовать это для удаления проверки при нажатии на кнопку Отмена

     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();"
    

    на кнопку Очистить.

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

    $('div#errorMessage').remove();

    однако, как только вы удалили, снова, если проверка не удалась, она не покажет эту сводку проверки потому что вы его удалили. Вместо этого используйте скрыть и отобразить с помощью кода ниже

    $('div#errorMessage').css('display', 'none');
    
    $('div#errorMessage').css('display', 'block');  
    

    ни одно из вышеперечисленных решений не сработало для меня. Я был разочарован, потратив на них свое время. Однако есть простое решение.

    решение было достигнуто путем сравнения 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"> 
    

    решение очень простой. Очистите HTML div, который содержит ошибки, а затем измените класс обратно в допустимое состояние.

            $('.validation-summary-errors').html()            
            $('.validation-summary-errors').addClass('validation-summary-valid');
            $('.validation-summary-valid').removeClass('validation-summary-errors');
    

    удачи в кодировании.

    если вы хотите сбросить numberOfInvalids() а затем добавить следующую строку

    Я только что сделал

    $('.input-validation-error').removeClass('input-validation-error');

    для удаления красной границы полей ошибок ввода.

    $(FORM_ID).validate().resetForm(); по-прежнему не работает, как ожидалось.

    я очищаю форму с resetForm(). Он работает во всех случаях, кроме одного!!

    когда я загружаю любую форму через Ajax и применяю проверку формы после загрузки моего dynamic HTML, то после того, как я пытаюсь сбросить форму с resetForm() и он терпит неудачу, а также он сбросил все проверки, которые я применяю к элементам формы.

    поэтому, пожалуйста, не используйте это для Ajax загруженных форм или инициализированных вручную утверждение.

    П. С. вы должны использовать Ник Крейвер ответьте за такой сценарий, как я объяснил.

    в моем случае помог с подходом:

    $(".field-validation-error span").hide();
    

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

    $(this).closest("div").find(".field-validation-error").empty();
    $(this).removeClass("input-validation-error");
    

    validator.resetForm() способ очистить текст ошибки. Но если вы хотите удалить красную границу из полей вы должны удалить класс has-error

    $('#[FORM_ID] .form-group').removeClass('has-error');