web-dev-qa-db-fra.com

Réinitialiser le formulaire MVC avec jQuery

Comment réinitialiser un formulaire?

en clair, effacez les valeurs de tous les champs et supprimez les messages d'erreur ValidationSummary validation-summary-errors avec jquery.

J'utilise le code ci-dessous mais ça ne marche pas:

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

J'utilise asp.net MVC3 et les scripts jQuery sont inclus dans ma page.

<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
21
Ghooti Farangi
$('.field-validation-error')
    .removeClass('field-validation-error')
    .addClass('field-validation-valid');

$('.input-validation-error')
    .removeClass('input-validation-error')
    .addClass('valid');
32
Darin Dimitrov

J'ai écrit une extension jQuery rapide pour gérer ce problème quand je l'ai rencontré qui:

  • Efface les erreurs de validation au niveau du champ
  • Résumé de validation efface/cache
  • Réinitialise la liste des erreurs internes de jQuery Validate

Il peut être appelé à partir d'un élément $ (sélectionné) dans le formulaire ou sur le formulaire lui-même.

Voici un exemple d'appelant (l'entrée est dans un formulaire):

<input onclick="$(this).resetValidation()" type="reset" value="Reset" />

Voici le code du plugin jQuery:

(function ($) {

    //re-set all client validation given a jQuery selected form or child
    $.fn.resetValidation = function () {

        var $form = this.closest('form');

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

J'espère que cela a aidé! Vous pouvez en lire plus à ce sujet et voir d'autres exemples sur mon blog ici:

http://www.johnculviner.com/post/2011/11/16/ClearReset-MVC-3-Form-and-Unobtrusive-jQuery-Client-Validation.aspx

50
John Culviner

vous pouvez utiliser une solution native (valider 1.9.0 + discret)

var $form = $(this).closest('form');

// reset errors with unobtrusive
$form.trigger('reset.unobtrusiveValidation');

// reset inputs
var validator = $form.validate(); // get saved validator
//validator.settings.ignore = ''; // if form hided (closed ui dialogs, etc)
validator.resetForm();
8
Towa48

Pour faire suite au message de Darin Dimitrov, ce qui suit effacera également le résumé de validation ...

$(".validation-summary-errors")
        .removeClass("validation-summary-errors")
        .addClass("validation-summary-valid");
4
Kennifer

Pour compléter la réponse de Darin et Kennifer, j'ai tout mis en place et ajouté une dernière partie pour réactiver la validation paresseuse.

        //Reset validation message
        $('.field-validation-error')
        .removeClass('field-validation-error')
        .addClass('field-validation-valid');

        //Reset input, select and textarea style
        $('.input-validation-error')
        .removeClass('input-validation-error')
        .addClass('valid');

        //Reset validation summary
        $(".validation-summary-errors")
        .removeClass("validation-summary-errors")
        .addClass("validation-summary-valid");

        //To reenable lazy validation (no validation until you submit the form)
        $('form').removeData('unobtrusiveValidation');
        $('form').removeData('validator');
        $.validator.unobtrusive.parse($('form'));
1
Gudradain

Le code suivant utilise find pour rechercher en premier la container puis l'enfant list. Si la liste est vide, la classe validation-summary-valid est ajoutée au conteneur et validation-summary-errors est supprimé.

var container = $('form').find('[data-valmsg-summary="true"]');
var list = container.find('ul');

if (list && list.length) {
    list.empty();
    container.addClass('validation-summary-valid').removeClass('validation-summary-errors');
1
Barmeshwar Singh

J'espère que cela vous aide http://www.electrictoolbox.com/jquery-clear-form/

Code heureux

0
Ravia