94 votes

Pourquoi la case à cocher reste-t-elle cochée lors du rechargement de la page ?

Je recharge une page web qui contient le code suivant :

<label for="showimage">Show Image</label>
<input id="showimage" name="showimage" type="checkbox" value="1" />

Même si les séjours HTML envoyés au navigateur sont les mêmes à chaque rechargement de la page, la case à cocher prend toujours la valeur cochée lorsqu'un rechargement a été effectué. En d'autres termes, si l'utilisateur coche la case et recharge la page, la case est toujours cochée.

Est-ce qu'il y a une mise en cache ici ?

Editar : J'ai essayé la solution de Gordon Bell ci-dessous et je constate que cela se produit toujours même après avoir supprimé la valeur="1". Y a-t-il autre chose qui m'échappe ?

<label for="showimage">Show Image</label> 
<input id="showimage" name="showimage" type="checkbox" />

204voto

Ajouter autocomplete="off" dans l'élément de formulaire de la page. L'inconvénient est que ce n'est pas du XHTML valide, mais cela résout le problème sans javascript compliqué.

39voto

Owen Points 36009

Oui, je crois que c'est la mise en cache. Je constate ce comportement sur Firefox par exemple (pas sur Safari, pour ce que ça vaut :) ).

vous pouvez recharger la page et contourner le cache (sur Firefox) en utilisant CTRL - SHIFT - R et vous verrez que la valeur de contrôle ne porte pas (une valeur normale CTRL - R récupérera cependant les informations du cache)

modifier : J'ai pu désactiver cette fonction côté serveur sur Firefox, en définissant un en-tête de contrôle du cache :

Cache-Control: no-store

cela semble désactiver la fonction "mémoriser les valeurs du formulaire" de Firefox.

0 votes

Ouaip, CTRL-SHIFT-R provoque la réinitialisation des cases à cocher. Existe-t-il un moyen d'empêcher que cela soit mis en cache ?

0 votes

Je ne pense pas (du moins pas du côté du serveur). firefox est vraiment agressif dans la mise en cache des choses. je n'ai pu obtenir qu'il arrête la mise en cache de manière fiable dans des situations comme celle-ci du côté du client.

0 votes

Ce n'est pas lié à la mise en cache en tant que telle, mais au fait qu'un rechargement dur désactive également la fonction délibérée de mémorisation du contenu des formulaires. Le même comportement affecte également les champs de texte, les menus, etc.

37voto

RainChen Points 332

Set autocomplete="off" avec js fonctionne également bien.

par exemple en utilisant jquery :

$(":checkbox").attr("autocomplete", "off");

0 votes

Merci, cela m'a beaucoup aidé. :)

1 votes

J'ai trouvé que vous aviez besoin $("#formId").attr("autocomplete", "off") donde #formId est l'identifiant de votre formulaire.

0 votes

@DanDiplo il y a de nombreuses occasions où nous utilisons une case à cocher sans formulaire donc il est illogique d'appliquer ("#formId").attr("autocomplete", "off")

3voto

cmshnrblu Points 21

Il s'agit d'une vieille question mais le problème est toujours d'actualité pour firefox. Aucune des réponses que j'ai essayées n'a résolu le problème, mais qu'est-ce qui peut être fait ? a fait

    document.getElementById('formId').reset();

Cela réinitialise simplement le formulaire avec les options par défaut à chaque fois que la page se charge. Ce n'est pas l'idéal puisque vous perdez le contrôle granulaire, mais c'est la seule chose qui a résolu le problème pour moi.

1voto

PhiLho Points 23458

C'est une fonctionnalité intéressante de Firefox : si vous tapez quelque chose mais que vous rechargez la page, le texte reste dans la zone de texte. Idem pour les autres paramètres que vous avez choisis.

Hélas, cela ne fonctionne pas dans SO (probablement réinitialisé par JS) et dans les navigateurs plus idiots comme IE...

Je vous propose une solution : si vous avez vraiment besoin de faire cela, réinitialisez le formulaire avec JS. form.reset() pourrait faire l'affaire (agit comme le bouton de saisie Reset).

1 votes

Ça fait un peu bricolage, ou c'est comme tirer sur un moineau avec un canon.

0 votes

@MészárosLajos Qu'est-ce que le hacky / overkill, et pourquoi le considérez-vous comme tel ? Voyez-vous quelque chose de plus simple ?

0 votes

Que faire si vous voulez seulement que le formulaire se réinitialise parialement ? Personnellement, je ne veux désactiver le cache d'entrée que pour les cases à cocher, mais pas pour les champs de texte. Je suis tout à fait d'accord avec vous, c'est une bonne fonctionnalité de firefox, mais pas pour les boutons personnalisés à deux états, qui sont essentiellement des cases à cocher redessinées. Une autre chose est, pourquoi utiliser javascript, où vous pouvez simplement utiliser une propriété html pour empêcher ce comportement ? Et oui, je sais, "autocomplete=off" rend le code html invalide, mais la page fonctionne toujours.

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