164 votes

Fonction jQuery/Javascript pour effacer tous les champs d'un formulaire

Je cherche une fonction jQuery qui efface tous les champs d'un formulaire après avoir soumis le formulaire.

Je n'ai pas de code HTML à montrer, j'ai besoin de quelque chose de générique.

Pouvez-vous nous aider ?

Gracias.

2 votes

Une solution très simple consiste à faire ce qui suit : var originalForm = $("#myForm#).html() ; Au moment où vous appuyez sur le bouton Annuler ou Soumettre, la dernière commande doit être $("#myForm").html(originalForm) ; Cela remettra tous les champs dans leur état d'origine, tels qu'ils ont été définis dans le fichier HTML ...

0 votes

<button type="reset">Reset</button> est une solution simple que vous pourriez rechercher.

387voto

Jason McCreary Points 35919

Nota Cette réponse concerne la réinitialisation des champs de formulaire, et non l'effacement des champs - voir la mise à jour.

Vous pouvez utiliser la fonction native de JavaScript reset() pour réinitialiser le formulaire entier à son par défaut l'État.

Exemple fourni par Ryan :

$('#myForm')[0].reset();

Nota: Cela peut ne pas réinitialiser certains champs, tels que type="hidden" .

UPDATE

Comme l'a noté IlyaDoroshin la même chose peut être accomplie en utilisant l'outil jQuery trigger() :

$('#myForm').trigger("reset");

UPDATE

Si vous devez faire plus que réinitialiser le formulaire à son par défaut vous devez revoir les réponses aux questions suivantes Réinitialisation d'un formulaire à plusieurs étapes avec jQuery .

22 votes

Plus précisément : $('#myForm')[0].reset();

17 votes

La réinitialisation n'efface pas un formulaire, elle remet simplement les valeurs du formulaire à leur valeur par défaut, qui peut être ou non "". La plupart des autres réponses de cette page sont meilleures.

8 votes

Le problème que j'ai, c'est que cette réponse est une demi-vérité et qu'elle induit en erreur certaines personnes qui cherchent vraiment à se "libérer" (c'était mon cas). Avec maintenant 48 votes positifs, il est évident que les personnes qui n'ont pas le temps et la diligence de lire les autres réponses, peuvent quitter cette page avec des informations incomplètes. Votre réponse n'est pas fausse, elle nécessite une mise à jour indiquant qu'elle ne va pas effacer, elle va réinitialiser :)

156voto

IlyaDoroshin Points 1267

Pour réinitialiser le formulaire (mais pas l'effacer), il suffit de déclencher reset événement :

$('#form').trigger("reset");

A clair un formulaire voir d'autres réponses.

1 votes

Cela devrait figurer plus haut dans les réponses !

3 votes

Cela ne fonctionne pas en combinaison avec la validation côté client. Si la validation a échoué, la réinitialisation n'efface pas les champs non valides mais les réinitialise à la dernière valeur saisie.

3 votes

@Jürgen Bayer personne ne parle de validation, il réinitialise juste le formulaire aux valeurs init Pour effacer les données invalides vous devez écrire votre propre méthode comme : $('#form input:invalid').val('')

86voto

ktamlyn Points 781

Quelque chose de similaire à $("#formId").reset() n'effacera pas les éléments de formulaire dont les valeurs par défaut sont différentes de celles de l'option "" . Cela peut notamment se produire lors de la soumission d'un formulaire précédent : une fois qu'un formulaire a été soumis reset() réinitialiserait les valeurs du formulaire à celles précédemment soumises qui ne seront probablement pas "" .

Une option pour effacer tous les formulaires de la page, est d'appeler une fonction telle que la suivante, en l'exécutant simplement comme clearForms() :

function clearForms()
{
    $(':input').not(':button, :submit, :reset, :hidden, :checkbox, :radio').val('');
    $(':checkbox, :radio').prop('checked', false);
}

Si vous voulez réinitialiser un formulaire spécifique, modifiez la fonction comme suit, et appelez-la en tant que clearForm($("#formId")) :

function clearForm($form)
{
    $form.find(':input').not(':button, :submit, :reset, :hidden, :checkbox, :radio').val('');
    $form.find(':checkbox, :radio').prop('checked', false);
}

Lorsque je suis arrivé sur cette page, j'avais besoin d'une solution qui tienne compte de la modification des valeurs par défaut des formulaires tout en permettant d'effacer tous les éléments saisis.

Notez que cela n'effacera pas placeholder texte.

2 votes

Votre code est pour moi la meilleure solution. J'ajoute simplement le conteneur comme paramètre à la fonction et une classe pour les éléments que nous ne voulons pas réinitialiser. La fonction finale ressemble à ceci : function clearForm($form) { $form.find(':input').not(':button, :submit, :reset, :hidden, .not-reset').val('') ; }

4 votes

@DayronGallardo Vous pourriez aussi ajouter $(container_element).find(':checkbox, :radio').prop('checked', false);

0 votes

@DayronGallardo n'oubliez pas d'ajouter aussi :checkbox, :radio à la .not (J'ai suggéré ces modifications).

22voto

Peppered Lemons Points 3170

Définissez le val à ""

function clear_form_elements(ele) {

        $(ele).find(':input').each(function() {
            switch(this.type) {
                case 'password':
                case 'select-multiple':
                case 'select-one':
                case 'text':
                case 'textarea':
                    $(this).val('');
                    break;
                case 'checkbox':
                case 'radio':
                    this.checked = false;
            }
        });

    }

<input onclick="clear_form_elements(this.form)" type="button" value="Clear All" />  
<input onclick="clear_form_elements('#example_1')" type="button" value="Clear Section 1" />
<input onclick="clear_form_elements('#example_2')" type="button" value="Clear Section 2" />
<input onclick="clear_form_elements('#example_3')" type="button" value="Clear Section 3" />

Vous pourriez aussi essayer quelque chose comme ça :

  function clearForm(form) {

    // iterate over all of the inputs for the form

    // element that was passed in

    $(':input', form).each(function() {

      var type = this.type;

      var tag = this.tagName.toLowerCase(); // normalize case

      // it's ok to reset the value attr of text inputs,

      // password inputs, and textareas

      if (type == 'text' || type == 'password' || tag == 'textarea')

        this.value = "";

      // checkboxes and radios need to have their checked state cleared

      // but should *not* have their 'value' changed

      else if (type == 'checkbox' || type == 'radio')

        this.checked = false;

      // select elements need to have their 'selectedIndex' property set to -1

      // (this works for both single and multiple select elements)

      else if (tag == 'select')

        this.selectedIndex = -1;

    });

  };

Plus d'informations aquí y aquí

0 votes

Ajoutez un $(this).change() à la fin de la fonction each-function pour propager les valeurs vides aux listeners.

0 votes

La méthode 1 est sans faille et répond correctement à la question. Merci pour cela

1 votes

@Onimusha Presque irréprochable. N'oubliez pas d'ajouter Types de saisie HTML5 à la première série de cas : case 'color': case 'date': case 'datetime': case 'datetime-local': case 'email': case 'month': case 'number': case 'range': case 'search': case 'tel': case 'time': case 'url': case 'week':

6voto

genesis Points 32591
    <form id="form" method="post" action="action.php">
      <input type="text" class="removeLater" name="name" /> Username<br/>
      <input type="text" class="removeLater" name="pass" /> Password<br/>
      <input type="text" class="removeLater" name="pass2" /> Password again<br/>
    </form>
    <script>
$(function(){
    $("form").submit(function(e){
         //do anything you want
         //& remove values
         $(".removeLater").val('');
    }

});
</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X