113 votes

Bug avec Firefox - L'attribut désactivé d'une entrée n'est pas réinitialisé lors du rafraîchissement.

J'ai trouvé ce que je crois être un bogue dans Firefox et je me demande s'il s'agit bien d'un bogue, ainsi que les solutions de contournement possibles.

Si vous créez une page web de base avec la source suivante :

<html>
  <head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
  </head>
  <body>
    <div>
      <input id="txtTest" type="text" />
      <input type="button" onclick="$('#txtTest').attr('disabled','disabled');" value="Set Disabled (jQuery)" />
      <input type="button" onclick="document.getElementById('txtTest').disabled = true;" value="Set Disabled (js)" />
      <input type="button" onclick="$('#txtTest').removeAttr('disabled');" value="Remove Disabled" />
    </div>
  </body>
</html>

Si vous disable le site textbox de façon dynamique, puis de rafraîchir la page, l'option textbox restera désactivé au lieu de revenir à son état initial de non désactivation. J'ai essayé cela dans IE8 et Chrome et ils se comportent comme prévu, en réinitialisant l'icône de l'utilisateur. textbox de nouveau désactivé quand je rafraîchis.

Une autre information intéressante est qu'il fait toujours la même chose si l'entrée est un fichier de type checkbox au lieu d'un textbox .

2 votes

Êtes-vous sûr qu'il ne s'agit pas simplement de la "fonctionnalité" de Firefox qui se souvient de l'état de l'ordinateur de l'utilisateur ? input éléments lorsque vous rafraîchissez simplement ?

0 votes

@thirtydot : Je me posais aussi la question, j'ai donc essayé de définir dynamiquement l'attribut "size", et il est réinitialisé lors de l'actualisation, comme tous les autres navigateurs. Il semble donc que ce que j'ai découvert jusqu'à présent, c'est que Firefox conserve l'attribut "disabled" ainsi que la valeur réelle de l'entrée, mais pas la taille...

5 votes

Wow, tu as raison ! J'ai mis autocomplete="off" sur l'entrée et cela n'arrive plus. C'est plutôt gênant que firefox l'active par défaut !

141voto

Stephen Mesa Points 1450

Il s'agit d'un "fonctionnalité" de Firefox qui mémorise les valeurs de saisie des formulaires lors des rafraîchissements de la page. Pour corriger ce comportement, il suffit de définir autocomplete="off" sur le formulaire contenant les entrées, ou juste directement sur l'entrée.

Cela empêche la complétion automatique de fonctionner et empêche le navigateur de se souvenir de l'état des champs de saisie.

Vous pouvez également procéder à un rafraîchissement complet en cliquant sur CTRL+F5. Cela réinitialisera complètement la page actuelle.

4 votes

Je viens de rencontrer ce problème lorsque l'utilisateur clique sur le bouton retour, on dirait que autocomplete="off" ne fonctionne pas dans ce cas.

1 votes

Je ne veux pas de formulaire, je n'ai qu'un seul bouton et Firefox "se souvient" qu'il est désactivé, ce qui est ennuyeux. Je peux le réinitialiser via JS mais c'est moche.

0 votes

@vsync Essayez de le définir sur l'élément bouton/entrée. Cela devrait aussi fonctionner !

10voto

Joshua Fox Points 4505

Pour traiter le bouton retour, faites ceci (à partir de aquí )

    window.addEventListener('pageshow', PageShowHandler, false);
    window.addEventListener('unload', UnloadHandler, false);

    function PageShowHandler() {
        window.addEventListener('unload', UnloadHandler, false);
    }

    function UnloadHandler() {
        //enable button here
        window.removeEventListener('unload', UnloadHandler, false);
    }

0 votes

Je ne sais pas pourquoi cette réponse n'a qu'un seul vote positif alors que l'autre réponse en a 99. Restaurer l'état désactivé au déchargement est mieux que de désactiver l'autocomplétion, puisque l'autocomplétion est une fonctionnalité souhaitable.

0 votes

Je pense que //enable button here est redondant ici ; d'après ce que j'ai compris des documents référencés, il suffit d'utiliser l'option présence de l'écouteur d'événement empêchera la page d'être stockée dans le BFcache.

0 votes

Notez que l'ajout d'un gestionnaire de déchargement a d'autres effets secondaires dans Firefox : developer.mozilla.org/fr/en-US/docs/Mozilla/Firefox/Releases/1.5/

3voto

str Points 2352

Il s'agit en effet d'une ouverture bug dans Firefox. Il existe également une note dans MDN : autocomplete (faites défiler vers le bas jusqu'à la deuxième case jaune) :

Note : Le autocomplete permet aussi de contrôler si Firefox, contrairement aux autres navigateurs, va maintenir l'état désactivé dynamique et (le cas échéant) l'état vérifié dynamique d'un <input> élément, <textarea> ou l'élément entier <form> à travers les chargements de pages. La fonction de persistance est activée par défaut. Définir la valeur de la autocomplete à l'attribut off désactive cette fonction. Cela fonctionne même lorsque l'attribut de complétion automatique ne s'applique normalement pas en raison de son type. Voir bug 654072 .

Si vous utilisez Bootstrap, vous serez peut-être intéressé par l'option

2voto

phk Points 722

Comme mentionné précédemment, vous devez ajouter autocomplete="off" à vos boutons.

Voici un sh + perl pour automatiser cette opération dans le cas de <button> dans vos fichiers/templates HTML (sous certaines hypothèses) :

find /path/to/html/templates -type f -name '*.html' -exec perl -pi -e \
  's/(?<=<button )(.*?)(?=>)/@{[(index($1,"autocomplete=")!=-1?"$1":"$1 autocomplete=\"off\"")]}/g' \
  {} +

Les hypothèses sont les suivantes :

  • Ouverture <button> commencent et finissent sur la même ligne. Si ce n'est pas le cas (c'est-à-dire qu'elles peuvent être réparties sur plusieurs lignes), le remplacement de la balise /g con /gs devrait aider (le s modificateur causes . pour correspondre également aux nouvelles lignes)

  • HTML valide (par exemple, il n'y a pas de caractères bizarres entre < y > ) et aucun supérieur non souligné ( > ) à l'intérieur de la balise d'ouverture.

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