128 votes

Créer une page pour indiquer au navigateur de ne pas mettre en cache/préserver les valeurs saisies

La plupart des navigateurs mettent en cache les valeurs de saisie des formulaires. Ainsi, lorsque l'utilisateur rafraîchit une page, les entrées ont les mêmes valeurs.

Voici mon problème. Lorsqu'un utilisateur clique sur Sauvez le serveur valide les données POSTed (par exemple, les produits vérifiés) et, si elles ne sont pas valides, les renvoie au navigateur. Toutefois, comme indiqué ci-dessus, même si le serveur efface la sélection de certaines valeurs, celles-ci peuvent encore être sélectionnées à cause du cache du navigateur !

Mes données comportent des cases à cocher invisibles (tant que l'élément parent n'est pas sélectionné), de sorte que l'utilisateur peut ne pas savoir qu'une valeur précédente est toujours sélectionnée, jusqu'à ce qu'il clique sur Sauvez et obtient un message d'erreur - même si l'utilisateur pense que ce n'est pas le cas. Ce qui est irritant.

Cela peut être résolu en faisant Ctrl + F5 mais ce n'est même pas une solution. Existe-t-il un moyen automatique/programmé d'indiquer au navigateur de ne pas mettre en cache les données saisies dans un formulaire/une page ?

1 votes

Est <form autocomplete="off"... une option pour vous ? Ce problème se produit-il sur tous les navigateurs, ou sur un seul en particulier ?

0 votes

Existe-t-il un moyen de répondre à cette question en ce qui concerne les listes déroulantes ? <select> listes. J'ai une liste et j'ai défini un selected mais le rafraîchissement de la page conserve les options sélectionnées précédemment.

0 votes

Je veux réaliser l'inverse - préserver les valeurs d'entrée de chaque page sur le bouton retour (cliquer deux fois sur le bouton retour - obtenir les entrées en conséquence). Il existe plusieurs exemples utilisant beaucoup de code JS (qui ne fonctionnent pas vraiment), mais existe-t-il un moyen plus simple ? J'ai essayé autocomplete="on" sur le formulaire et les champs de saisie, mais cela ne fonctionne pas. Le navigateur est Chrome.

207voto

DisgruntledGoat Points 21368

Est-ce que vous définissez explicitement les valeurs comme vides ? Par exemple :

<input type="text" name="textfield" value="">

Cela devrait empêcher les navigateurs d'insérer des données là où ils ne devraient pas. Alternativement, vous pouvez ajouter l'option autocomplete à la balise de formulaire :

<form autocomplete="off" ...></form>

1 votes

Je parle de cases à cocher, donc je ne peux pas définir la valeur à "". Et, est-ce que la désactivation de l'autocomplétion signifie ne pas stocker les valeurs de saisie du formulaire "lorsque l'utilisateur appuie sur F5", et pas seulement "pour la liste déroulante d'autocomplétion" ?

2 votes

Selon developer.mozilla.org/fr/How_to_Turn_Off_Form_Autocompletion Dans le cas de Gecko, autcompletion=off affecte la mise en cache de l'historique de la session. Je vais tester si cela fonctionne pour ce dont j'ai besoin.

1 votes

@queen3 : Oui, les cases à cocher posent problème car il n'y a aucun moyen de dire explicitement "non coché". Si vous rencontrez toujours des problèmes, vous pouvez essayer les solutions suivantes checked="false" il peut fonctionner dans certains navigateurs. Une autre solution consiste à utiliser Javascript/jQuery pour décocher explicitement toutes les cases à cocher au chargement de la page.

50voto

shareef Points 1482

De une référence Stack Overflow

Cela ne fonctionne pas avec value="" si le navigateur enregistre déjà la valeur, vous devez donc ajouter.

Pour une balise d'entrée, il y a l'attribut autocomplete que vous pouvez définir :

<input type="text" autocomplete="off" />

Vous pouvez également utiliser l'autocomplétion pour un formulaire.

9 votes

Dans Chrome, il apparaît autocomplete="off" n'a pas d'effet lorsqu'il est utilisé sur des éléments de formulaire individuels - même avec l'option value explicitement mis en blanc, et lors de l'envoi d'un Cache-Control: Must-Revalidate tête, cela n'a eu aucun effet. J'ai dû appliquer le autocomplete="off" de l'attribut <form> lui-même pour supprimer ce comportement dans Chrome.

0 votes

J'ai fait autocomplete="off" sur le formulaire mais ça n'a pas marché pour moi

0 votes

J'ai besoin de plus d'informations @KingsleySimon comme le navigateur, et vous pouvez avoir certains paramètres sur votre navigateur qui empêchent le comportement correct.

10voto

chris Points 2846

Une autre approche consisterait à réinitialiser le formulaire en utilisant le JavaScript juste après le formulaire dans le HTML :

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>

10voto

Anand Dwivedi Points 1429

En fait, il y a deux façons de vider le cache :

<form autocomplete="off"></form>

ou

$('#Textfiledid').attr('autocomplete', 'off');

7voto

erikrunia Points 2149

Cela a fonctionné pour moi dans les navigateurs plus récents :

autocomplete="new-password"

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