440 votes

Effacer les champs de formulaire avec jQuery

Je veux effacer tous les champs de saisie et de zone de texte d'un formulaire. Cela fonctionne comme suit lorsqu'on utilise un bouton de saisie avec l'option reset classe :

$(".reset").bind("click", function() {
  $("input[type=text], textarea").val("");
});

Cela effacera tous les champs de la page, et pas seulement ceux du formulaire. À quoi ressemblerait mon sélecteur pour le seul formulaire dans lequel se trouve le bouton de réinitialisation ?

0 votes

Consultez la réponse de Paolo Bergantino stackoverflow.com/questions/680241/blank-out-a-form-with-jquery

2 votes

Méthode plus détaillée pour réinitialiser un formulaire ici .

668voto

ngen Points 3188

Pour jQuery 1.6 et plus :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .prop('checked', false)
  .prop('selected', false);

Pour jQuery < 1.6 :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .removeAttr('checked')
  .removeAttr('selected');

Veuillez consulter cet article : Réinitialisation d'un formulaire à plusieurs étapes avec jQuery

Ou

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

Comme jQuery suggère :

Pour récupérer et modifier les propriétés du DOM, telles que l'adresse de l'utilisateur. checked , selected o disabled des éléments de formulaire, utilisez l'option .prop() método.

3 votes

Le premier morceau de code donnera la valeur "" aux cases à cocher au lieu de simplement les décocher. Et cela n'affectera pas les sélections, car ce sont les balises d'option qui sont sélectionnées.

6 votes

Pour éviter de supprimer les valeurs des cases à cocher, j'ai utilisé ce qui suit, inspiré par votre réponse : $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not('‌​:checkbox, select').val('').removeAttr('value'); . Il supprimera les valeurs par défaut (c'est-à-dire value="something" mais pas pour les cases à cocher ou les sélections.

19 votes

N'UTILISEZ PAS CECI (option 1) si vous avez des radios, des cases à cocher ou des sélections, vous perdrez beaucoup de temps à trouver un bug étrange après la disparition de leurs valeurs. La version correcte, qui laisse leurs valeurs intactes : $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not('‌​:checkbox, :radio, select').val(''); (basé sur le commentaire de Jeppe Mariager-Lam)

529voto

ShaneBlake Points 4844
$(".reset").click(function() {
    $(this).closest('form').find("input[type=text], textarea").val("");
});

50 votes

N'oubliez pas votre input[type=password] champs.

66 votes

Cette réponse couvre la question initiale. Ceux qui veulent plus que de simples champs de texte devront évidemment ajouter du code si nécessaire...

2 votes

N'oubliez pas non plus qu'il y aura d'autres types d'entrées que type=password (comme l'a dit SammyK) dans HTML5 : type=url, type=digits, type=email, etc. http://www.w3.org/TR/html5/forms.html#states-of-the-type-attribute

172voto

user768680 Points 374

Y a-t-il une raison de ne pas l'utiliser ?

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

1 votes

Je pense que l'effacement et la réinitialisation du formulaire sont différents. Regardez cette démo : jsfiddle.net/daubac402/7newh9Lk

64voto

parapura rajkumar Points 16597

Cela ne permet pas de gérer les cas où les champs de saisie du formulaire ont des valeurs par défaut non vides.

Quelque chose comme ça devrait marcher

$('yourdiv').find('form')[0].reset();

0 votes

J'ai juste le code js de mon premier post et je veux qu'il fonctionne sur chaque page avec plusieurs boutons de réinitialisation dans plusieurs formulaires. Donc c'est juste le sélecteur qui a besoin d'une contribution.

55voto

Lukas Liesis Points 564

Si vous utilisez des sélecteurs et que vous transformez les valeurs en valeurs vides, cela ne réinitialise pas le formulaire, cela rend tous les champs vides. La réinitialisation consiste à rendre le formulaire tel qu'il était avant toute action d'édition de la part de l'utilisateur après le chargement du formulaire du côté serveur. S'il y a une entrée avec le nom "nom d'utilisateur" et que ce nom d'utilisateur a été pré-rempli depuis le côté serveur, la plupart des solutions sur cette page supprimeront cette valeur de l'entrée, et ne la réinitialiseront pas à la valeur telle qu'elle était avant les changements de l'utilisateur. Si vous avez besoin de réinitialiser le formulaire, utilisez ceci :

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

si vous n'avez pas besoin de réinitialiser le formulaire, mais de remplir toutes les entrées avec une certaine valeur, par exemple une valeur vide, alors vous pouvez utiliser la plupart des solutions des autres commentaires.

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