Jquery validate clear error

Reset validation (clear error messages) #76 Comments This is not really an issue, but I cannot seem to find an easy way to do this. I am using a form in a modal for record add/edits. If the content of the form gets populated dynamically by means of a record edit, the error messages […]

Содержание

  1. Reset validation (clear error messages) #76
  2. Comments
  3. Cannot clear validation errors when jquery.form library is included — only reset entire form. #1540
  4. Comments
  5. Как очистить сообщения об ошибках проверки jQuery?
  6. 29 ответы
  7. Как очистить сообщения об ошибках проверки jQuery?
  8. ОТВЕТЫ
  9. Ответ 1
  10. Ответ 2
  11. Ответ 3
  12. Ответ 4
  13. Ответ 5
  14. Ответ 6
  15. Ответ 7
  16. Ответ 8
  17. Ответ 9
  18. Ответ 10
  19. Ответ 11
  20. Ответ 12
  21. Ответ 13
  22. Ответ 14
  23. Ответ 15
  24. Ответ 16
  25. Ответ 17
  26. Ответ 18
  27. Ответ 19
  28. Ответ 20
  29. Ответ 21
  30. Ответ 22
  31. Ответ 23
  32. Ответ 24

Reset validation (clear error messages) #76

This is not really an issue, but I cannot seem to find an easy way to do this. I am using a form in a modal for record add/edits. If the content of the form gets populated dynamically by means of a record edit, the error messages from the previous validation still shows. I would like to clear all validation messages through jQuery. How do I do this?

The text was updated successfully, but these errors were encountered:

You can trigger the blur event on the form elements that you need re-validation after they are populated.
$( «#target» ).blur(); //

http://api.jquery.com/blur/
If the validation of the new elements is successful it will clear all errors, if something needs attention they’ll receive new error messages.

Thank you, but that is not exactly what I am looking for. My functionality allows you to also «reset» the form, which makes it a blank form again. I would like all validation messages to disappear until a field is filled in or «Submit» is clicked on, like the form was initially on page load. If I follow your instruction, all fields with length > 0 validation will still show error messages as these fields are empty.

Well, ‘length = 0’ but yes, I’m following your reasoning. So I’m guessing that you’re looking for:

And all elements with that class will be removed, I’m just not sure if it will fire the validation again. You’ll need to test it.

Thank you for your help thus far. $( «.form-error» ).remove(); removed the validation error messages. However, the text box borders are still red. Even if I do the following:

$(‘.error’).removeAttr(‘style’);
$(‘.error’).removeAttr(‘data-validation-current-error’);
$(‘.error’).removeClass(‘error’);

The textbox borders are still red. Although they do go from a bright red to a more maroon red. I have removed all additional attributes and classes from the input so that it looks just like it looked initially, but the border remains. This is acceptable for now, but it would be nice if the validation had some kind of reset function to do all of this for you when you reset the form.

I’m thinking on implementing this so that the error messages and styles will be removed when you call the native function reset on a form. Something like:

Thank you, I’m sure that would help a lot. 🙂

Источник

Cannot clear validation errors when jquery.form library is included — only reset entire form. #1540

We’ve got some custom integration between jquery-validation and an Ajax form. We also use jquery.form in some of our codebase.

We want to be able to reset ONLY the form errors, which traditionally we would do with a call to $validator.resetForm();

Unfortunately, when you have the jquery.form library included, jquery-validation’s resetForm method also calls $.fn.resetForm. This causes the form data itself to be reset.

Due to this, there’s no way to reset just the form errors without also resetting the form content with this library installed. I also can’t see a way to opt-out of this assumptive integration.

The obvious answer is «don’t use jquery.form» but unfortunately that’s not an option. I’d much prefer it if there was a method exclusively for resetting validation, or a toggle to opt in/out of the jquery.form integration.

The text was updated successfully, but these errors were encountered:

Just came across this issue and found that the problem is caused by these lines /src/core.js#L479-L481:

The jquery.form library defines already this function to reset the form data, see jquery.form.js#L1211-L1222:

So, the plugin will call this function first to wipe the form data, then reset the error messages.

Also, there is already a unit test which assert that the form was cleared when jquery form plugin is included, see https://github.com/jzaefferer/jquery-validation/blob/master/test/test.js#L840.

👉 So this is the intended behavior, not a bug.

But even after knowing this behavior is intended, there is a question that needs an answer:

«why the three lines above (the first link) are added in the first place?».

I tracked down the commits in order to answer it, and found that these lines are already there when jzafferer pushed the whole project for the first time back in Aug 1, 2009

So only @jzaefferer can answer this question.

I forgot to mention that you can work around this issue by overriding the resetForm function of jquery form plugin , what I did is:

@Arkni thanks for the explanation. I too came to the conclusion about those lines of code during my original debugging. I also agree this appears to be the intended behaviour when integrated with jquery.form.

We use jquery.form in a variety of places, so just wholesale noop’ing jquery.form’s resetForm function isn’t really an option. It’s also equivalently hacky as my original money-patch, so I don’t see much of a gain.

My issue, is I’d rather that jquery-validation didn’t assume I want this integrated functionality when the two libraries are on the same page, or at least let me disable the integration (which would be backwards compat).

In case I’ve missed something and there’s a better way to do this, here’s why I’m down this path:
I’m trying to use jquery-validation to accept a validation response from the server (JSON), which maps errors messages to fields. When I re-submit the form, I want to use jquery-validation to clear any remaining validation errors.
This is all working, bar the fact that I can’t clear the validation errors using jquery-validation without jquery.form also being called to reset the form data.

Again, thanks for taking the time to look at this.

We use jquery.form in a variety of places, so just wholesale noop’ing jquery.form’s resetForm function isn’t really an option. It’s also equivalently hacky as my original money-patch, so I don’t see much of a gain.

I see what you mean, I also thought about that and looking for another workaround.

In case I’ve missed something and there’s a better way to do this, here’s why I’m down this path:
I’m trying to use jquery-validation to accept a validation response from the server (JSON), which maps errors messages to fields. When I re-submit the form, I want to use jquery-validation to clear any remaining validation errors.
This is all working, bar the fact that I can’t clear the validation errors using jquery-validation without jquery.form also being called to reset the form data.

I hope this integration was removed from the first time. Until this happens, I’m using an other ugly solution (Sorry I forgot to came back to mention it here):

I guess a proper integration fix / workaround for you could also be

so you only need to do it once at init time and you can use the API of jquery-validate as suggested in the samples etc.

We cannot change the code in core, because it is a BC break and some other users and libs might already rely on it. Therefore I would declare it as intended behaviour.

Feel free to discuss it further, will close the issue for now, as I see nothing we could do about it.

Источник

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

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

Но я хочу очистить сообщения об ошибках в моей форме, когда я нажимаю кнопку «Очистить», которая вызывает отдельную функцию. clearUser() .

29 ответы

Вы хотите, чтобы resetForm() Метод:

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

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

Создан 22 июля ’17, 09:07

Для тех, кто использует бутстрап, есть случаи, когда resetForm() не очищает все экземпляры .error на дочерних элементах формы. Это оставит остаточный CSS, такой как красный цвет текста, если вы не вызовете .removeClass() . Пример: $(‘#myform .control-group’).removeClass(‘error’); — Jlewkovich

При использовании bootstrap 3 это не скрывает ошибок проверки полей. Какая жалость. — Маффин Человек

У меня работает с Bootstrap 3. Возможно, проблема в вашей интеграции обеих библиотек? — Берни

Нет, этот resetForm буквально даже оставит данные формы. — Кодомоль

то, что @JLewkovich говорит, что использование bootstrap3 верно, необходимо реализовать ручной сброс, переход в инспектор и выяснение, какие классы применяются при ошибках — Нестор Кольт

Я сам столкнулся с этой проблемой. Мне нужно было условно проверять части формы, пока форма строилась на основе шагов (т.е. определенные входные данные добавлялись динамически во время выполнения). В результате иногда для раскрывающегося списка выбора требуется проверка, а иногда — нет. Однако к концу испытания ее нужно было проверить. В результате мне понадобился надежный метод, который нельзя было обойти. Я проконсультировался с исходным кодом для jquery.validate .

Вот что я придумал:

  • Удалите ошибки, указав успешную проверку
  • Обработчик вызовов для отображения ошибок
  • Очистить всю память об успехах или ошибках
  • Сбросить проверку всей формы

    Вот как это выглядит в коде:

    минифицирован как расширение jQuery:

    ответ дан 15 апр.

    отлично, это решение также работает с «ValidationMessageFor» — Сайед Али

    Большой! Отлично работает с Bootstrap и MVC! — швейцарский

    Во-первых, спасибо! Если бы это отлично работало в течение многих лет, но теперь я обнаружил проблему с производительностью: showErrors выполняет некоторые манипуляции с DOM и вызывается для каждого элемента в форме. Браузер завис на пару секунд при использовании этого кода в форме с

    30 элементами управления. Решением для меня было переехать showErrors вне цикла и просто вызовите его один раз прямо перед validator.resetForm . Насколько я могу судить, он ведет себя точно так же и намного быстрее. — Майкл Сандино

    Я использовал это до сегодняшнего дня, когда обнаружил, что если я использую этот метод для кнопки «Сброс», он удаляет все ошибки, но больше нет проверки . даже если я попытаюсь подтвердить еще раз, все в порядке — Саванди

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

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

    @mark — правильно, но не для того, чтобы . они все еще недействительны, в этом случае мы просто скрываем сообщения об ошибках. Это альтернатива принятому ответу для случаев, когда вы конкретно хотите скрыть (не игнорировать, например, запретить отправку) ошибки. Это случается чаще, чем вы думаете 🙂 — Ник Крейвер ♦

    Проблема в том, что вы сбрасываете форму обратно и снова редактируете ее. В моем диалоговом окне ошибок отображается количество ошибок, и счетчик просто продолжает их суммировать. Даже resetForm не помогает. — отметка

    Даже я сделал это, но это приводит к другой проблеме. Подтверждения не применяются, когда в следующий раз откроется диалоговое окно! — Вандеш

    Этот метод сработал для меня на веб-сайте Bootstrap 3. Просто пришлось изменить класс ошибки на следующий: $(«.has-error»).removeClass(«has-error»); — Майк Блэк

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

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

    ответ дан 02 авг.

    Сработало, но если в поле ввода есть крестик, вы также должны добавить $ (‘. Is-invalid’). RemoveClass (‘is-invalid’); — Сумит Кумар Гупта

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

    Создан 22 июля ’17, 09:07

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

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

    По этому поводу есть сообщения об ошибках.

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

    ответ дан 05 окт ’12, 17:10

    Только в мире JavaScript такое положение вещей приемлемо. — StackOverthrow

    Источник

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

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

    Но я хочу очистить сообщения об ошибках в своей форме, когда я нажимаю кнопку «Очистить», которая вызывает отдельную функцию clearUser() .

    ОТВЕТЫ

    Ответ 1

    Вам нужен метод resetForm() :

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

    Ответ 2

    Я сам столкнулся с этой проблемой. У меня возникла необходимость условно проверить части формы, пока форма была построена на основе этапов (т.е. Некоторые входы были динамически добавлены во время выполнения). В результате иногда выпадающее меню select должно требовать проверки, а иногда и нет. Однако к концу испытания он должен быть проверен. В результате мне понадобился надежный метод, который не был обходным путем. Я прочитал исходный код для jquery.validate .

    Вот что я придумал:

    Очистить ошибки, указав успешность проверки Обработчик вызовов для отображения ошибок Удалить все хранилища успехов или ошибок Reset проверка всей формы

    Вот как это выглядит в коде:

    minified как расширение jQuery:

    Ответ 3

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

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

    Ответ 4

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

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

    Ответ 5

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

    Ответ 6

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

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

    На этом есть ошибки.

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

    Ответ 7

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

    Ответ 8

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

    Ответ 9

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

    Ответ 10

    Для тех, кто использует код Bootstrap 3 ниже, вы очистите всю форму: meassages, icons и colors.

    Ответ 11

    Я тестировал с помощью:

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

    Ответ 12

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

    Ответ 13

    на кнопке «Очистить».

    Ответ 14

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

    Ответ 15

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

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

    Ответ 16

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

    Решение было достигнуто путем сравнения маркировки HTML для допустимого состояния, а HTML — для состояния ошибки.

    Никаких ошибок не будет:

    когда возникает ошибка, этот div заполняется с ошибками, а класс изменен на валидацию-сводки-ошибки:

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

    Ответ 17

    Если вы хотите reset numberOfInvalids() , а затем добавить следующую строку в resetForm в строку jquery.validate.js номер строки: 415.

    Ответ 18

    Я просто сделал

    чтобы удалить красную границу полей ввода.

    Ответ 19

    $(FORM_ID).validate().resetForm(); все еще работает не так, как ожидалось.

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

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

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

    P.S. Для такого сценария, который я объяснил, вам нужно использовать Nick Craver.

    Ответ 20

    В моем случае это помогло:

    Ответ 21

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

    Ответ 22

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

    Ответ 23

    Пробовал каждый ответ. Единственное, что сработало для меня, было:

    Ответ 24

    Ни один из других решений не работал для меня. resetForm() явно документирован для сброса фактической формы, например, удалить данные из формы, чего я не хочу. Иногда бывает, что иногда этого не происходит, но просто удаляйте ошибки. Что, наконец, помогло мне в этом:

    Источник

  • If you didn’t previously save the validators apart when attaching them to the form you can also just simply invoke

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

    as .validate() will return the same validators you attached previously (if you did so).

    If you want to simply hide the errors:

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

    If you specified the errorClass, call that class to hide instead error (the default) I used above.

    You want the resetForm() method:

    var validator = $("#myform").validate(
       ...
       ...
    );
    
    $(".cancel").click(function() {
        validator.resetForm();
    });
    

    I grabbed it from the source of one of their demos.

    Note: This code won’t work for Bootstrap 3.

    I came across this issue myself. I had the need to conditionally validate parts of a form while the form was being constructed based on steps (i.e. certain inputs were dynamically appended during runtime). As a result, sometimes a select dropdown would need validation, and sometimes it would not. However, by the end of the ordeal, it needed to be validated. As a result, I needed a robust method which was not a workaround. I consulted the source code for jquery.validate.

    Here is what I came up with:

  • Clear errors by indicating validation success
  • Call handler for error display
  • Clear all storage of success or errors
  • Reset entire form validation

    Here is what it looks like in code:

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

    minified as a jQuery extension:

    $.fn.clearValidation = function(){var v = $(this).validate();$('[name]',this).each(function(){v.successList.push(this);v.showErrors();});v.resetForm();v.reset();};
    //used:
    $("#formId").clearValidation();
    
  • @Magnanimity

    This is not really an issue, but I cannot seem to find an easy way to do this. I am using a form in a modal for record add/edits. If the content of the form gets populated dynamically by means of a record edit, the error messages from the previous validation still shows. I would like to clear all validation messages through jQuery. How do I do this?

    @FDVS

    You can trigger the blur event on the form elements that you need re-validation after they are populated.
    $( «#target» ).blur(); // ~~~~http://api.jquery.com/blur/
    If the validation of the new elements is successful it will clear all errors, if something needs attention they’ll receive new error messages.

    @Magnanimity

    Thank you, but that is not exactly what I am looking for. My functionality allows you to also «reset» the form, which makes it a blank form again. I would like all validation messages to disappear until a field is filled in or «Submit» is clicked on, like the form was initially on page load. If I follow your instruction, all fields with length > 0 validation will still show error messages as these fields are empty.

    @FDVS

    Well, ‘length = 0’ but yes, I’m following your reasoning. So I’m guessing that you’re looking for:

    $( «.form-error» ).remove();

    And all elements with that class will be removed, I’m just not sure if it will fire the validation again. You’ll need to test it.

    @Magnanimity

    Thank you for your help thus far. $( «.form-error» ).remove(); removed the validation error messages. However, the text box borders are still red. Even if I do the following:

    $(‘.error’).removeAttr(‘style’);
    $(‘.error’).removeAttr(‘data-validation-current-error’);
    $(‘.error’).removeClass(‘error’);

    The textbox borders are still red. Although they do go from a bright red to a more maroon red. I have removed all additional attributes and classes from the input so that it looks just like it looked initially, but the border remains. This is acceptable for now, but it would be nice if the validation had some kind of reset function to do all of this for you when you reset the form.

    @victorjonsson

    I’m thinking on implementing this so that the error messages and styles will be removed when you call the native function reset on a form. Something like:

    $('form').on('reset', function() {
      var $form = $(this);
      $form.find('.error,.valid').css('border-color', '').removeClass('error').removeClass('valid');
      $form.find('.form-error').remove();
    });
    
    // Then you could do this to remove all error messages and error styles
    document.getElementById('my-form').reset(); 

    @Magnanimity

    Thank you, I’m sure that would help a lot. :)

    @victorjonsson

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

    29 ответы

    Вы хотите, чтобы resetForm() Метод:

    var validator = $("#myform").validate(
       ...
       ...
    );
    
    $(".cancel").click(function() {
        validator.resetForm();
    });
    

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

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

    Создан 22 июля ’17, 09:07

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

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

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

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

    Создан 18 янв.

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

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

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

    ответ дан 02 авг.

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

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

    Создан 22 июля ’17, 09:07

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

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

    По этому поводу есть сообщения об ошибках.

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

    ответ дан 05 окт ’12, 17:10

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

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

    ответ дан 31 мая ’13, 04:05

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

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

    Создан 03 фев.

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

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

    Создан 06 ноя.

    Я тестировал:

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

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

    ответ дан 24 дек ’12, 13:12

    Для тех, кто использует код 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(); });
    

    Создан 26 фев.

    Пробовал каждый ответ. Единственное, что у меня сработало, это:

    $("#editUserForm").get(0).reset();
    

    Использование:

    jquery-validate/1.16.0
    
    jquery-validation-unobtrusive/3.2.6/
    

    ответ дан 17 окт ’18, 13:10

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

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

    Создан 22 сен.

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

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

    Создан 17 ноя.

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

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

    ответ дан 22 мая ’18, 16:05

    Ни одно из других решений не помогло мне. resetForm() четко задокументирован для сброса фактической формы, например, удаления данных из формы, чего я не хочу. Просто бывает, что иногда этого не делают, а просто убирают ошибки. Что в итоге сработало для меня, так это:

    validator.hideThese(validator.errors());
    

    ответ дан 06 дек ’18, 09:12

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

     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);
                    }
                } 
            }
    

    Создан 23 ноя.

    Попробуй использовать:

    onClick="$('.error').remove();"
    

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

    ответ дан 18 авг.

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

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

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

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

    Создан 05 июля ’13, 08:07

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

    Решение было достигнуто путем сравнения разметки 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');
    

    Удачного кодирования.

    Создан 12 ноя.

    Если вы хотите сбросить numberOfInvalids() а затем добавьте следующую строку в resetForm функции в jquery.validate.js номер строки файла: 415.

    this.invalid = {};
    

    Создан 15 фев.

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

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

    убрать красную рамку на полях ошибок ввода.

    Создан 24 фев.

    $(FORM_ID).validate().resetForm(); все еще не работает должным образом.

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

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

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

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

    Создан 22 июля ’17, 09:07

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

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

    Создан 20 июн.

    Функционирование с использованием подходов Трэвис Дж., Ю.Левкович и Ник Крейвер

    // NOTE: Clears residual validation errors from the library "jquery.validate.js". 
    // By Travis J and Questor
    // [Ref.: https://stackoverflow.com/a/16025232/3223785 ]
    function clearJqValidErrors(formElement) {
    
        // NOTE: Internal "$.validator" is exposed through "$(form).validate()". By Travis J
        var validator = $(formElement).validate();
    
        // NOTE: Iterate through named elements inside of the form, and mark them as 
        // error free. By Travis J
        $(":input", formElement).each(function () {
        // NOTE: Get all form elements (input, textarea and select) using JQuery. By Questor
        // [Refs.: https://stackoverflow.com/a/12862623/3223785 , 
        // https://api.jquery.com/input-selector/ ]
    
            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
    
        // NOTE: For those using bootstrap, there are cases where resetForm() does not 
        // clear all the instances of ".error" on the child elements of the form. This 
        // will leave residual CSS like red text color unless you call ".removeClass()". 
        // By JLewkovich and Nick Craver
        // [Ref.: https://stackoverflow.com/a/2086348/3223785 , 
        // https://stackoverflow.com/a/2086363/3223785 ]
        $(formElement).find("label.error").hide();
        $(formElement).find(".error").removeClass("error");
    
    }
    
    clearJqValidErrors($("#some_form_id"));
    

    ответ дан 12 мар ’19, в 18:03

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

    $('.error').remove();
            $('.is-invalid').removeClass('is-invalid');
    

    ответ дан 31 мая ’20, 16:05

    Ничего из вышеперечисленного не сработало для начальной загрузки 4. Эта проблема решила для меня:

    $('#formId .invalid-feedback').remove()
    $('#formId input').removeClass('is-valid');
    $('#formId input').removeClass('is-invalid');
    

    ответ дан 02 авг.

    я использую aspnet jquery-проверка ненавязчивый и следующая функция очистила для меня ошибки проверки:

    function clearFormValidations(formElement) {
        $(formElement).validate().resetForm();
    
        // reset unobtrusive validation summary, if it exists
        $(formElement).find("[data-valmsg-summary=true]")
            .removeClass("validation-summary-errors")
            .addClass("validation-summary-valid")
            .find("ul").empty();
    
        // reset unobtrusive field level, if it exists
        $(formElement).find("[data-valmsg-replace]")
            .removeClass("field-validation-error")
            .addClass("field-validation-valid")
            .empty();
    }
    

    Применение:

    // to clear the errors:
    var myForm = document.getElementById('myFormId');
    clearFormValidations(myForm);
    
    // to validate again
    var validator = $(myForm).validate();
    validator.form();
    

    Я нашел указанную выше функцию здесь

    ответ дан 20 авг.

    Для v1.19.0 для проверки JQuery я обнаружил, что у меня работает эта одна строка кода:

    $('.field-validation-error').removeClass('field-validation-error').addClass('field-validation-valid').html('');
    

    Фактически, поле кажется действительным для пользователя, но когда они снова нажимают кнопку «Отправить», проверка запускается повторно.

    ответ дан 28 авг.

    Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

    jquery
    jquery-validate

    or задайте свой вопрос.

    I was looking around for a way to reset form Unobtrusive jQuery validation. In other words, I want to reset everything to default. Unobtrusive validation closely relates to data annotations because they hold the validation rules. For example, you can set up min or max length a text box field. More importantly, how to clear unobtrusive jQuery validation, we learn that it doesn’t have any way to reset the UI after errors occur. However, you can safely use:

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

    Reset Form Unobtrusive jQuery validation Feature

    Reset Form Unobtrusive jQuery validation Feature

    The best example I found online was on John Culviner blog. It wasn’t exactly what I was looking for, but it was a good start. He resets the form by using a button and attributes, I need a function that does that, so I create a plugin that clears the fields on demand.

    Clear Reset Form Unobtrusive jQuery validation

    The clear reset form unobtrusive jQuery validation plugin itself is quite simple. It’s wrapped inside an IIFE function or Immediately Invoked Function Expression. To use it, start with writing it in the following shorthand way.

    (function () { 
    // logic here 
    })();

    Inside the IIFE, I created a function called “clearForm” that takes options. Looking closely at the $.extend method, I tell it to find a form on the page and use that as it’s Id. Please let me know if I’m doing double work here because I’m also setting the form ID from options (you will see in the complete example).

    $.fn.clearForm = function(options) {
        formId: this.closest('form')
    }

    Moving to the part of reset form unobtrusive jQuery validation, I make the following calls. The first call puts the structure into a clean state.

    $form.validate().resetForm();

    Afterword, if you’re using MVC, you will want to reset the validation summary. The following is an optional step.

     $form.find("[data-valmsg-summary=true]")
        .removeClass("validation-summary-errors")
        .addClass("validation-summary-valid")
        .find("ul").empty();

    Finally, if you’re using MVC, you will want to reset all the error fields and finish by returning the form.

    //reset unobtrusive field level, if it exists 
    $form.find("[data-valmsg-replace]")
        .removeClass("field-validation-error")
        .addClass("field-validation-valid")
        .empty();
    
    return $form;

    Final Thoughts

    For your convenience, I’ve put together the JavaScript. To use it, you will need to call $(“#signupform”).clearForm(); I hope this script makes your life a tad bit easier while working to Reset Form Unobtrusive jQuery validation.

    (function($) {
    
        $.fn.clearForm = function(options) {
    
            // This is the easiest way to have default options.
            var settings = $.extend({
                // These are the defaults.
    
                formId: this.closest('form')
    
            }, options);
    
            var $form = $(settings.formId);
    
            //reset jQuery Validate's internals
            $form.validate().resetForm();
    
            //reset unobtrusive validation summary, if it exists
            $form.find("[data-valmsg-summary=true]")
                .removeClass("validation-summary-errors")
                .addClass("validation-summary-valid")
                .find("ul").empty();
    
            //reset unobtrusive field level, if it exists
            $form.find("[data-valmsg-replace]")
                .removeClass("field-validation-error")
                .addClass("field-validation-valid")
                .empty();
    
            return $form;
        };
    
    }(jQuery));

    If you want to share your judgment on how to Reset Form Unobtrusive jQuery validation:

    • Leave a comment over the “What’s Crackin’ (•◡•) /” section below.
    • Share this show on Twitter, Google+ or Pinterest

    Понравилась статья? Поделить с друзьями:
  • Jquery success error function
  • Jquery post success error
  • Jquery post error handling
  • Jquery post 500 internal server error
  • Jquery min js 2 uncaught error syntax error unrecognized expression