Désactiver l'autocomplet via CSS

Est-il possible d'utiliser les CSS pour désactiver la saisie semi-automatique sur un élément de formulaire (en particulier un textfield)?

j'utilise une bibliothèque d'étiquettes qui ne permet pas l'élément autocomplete et je voudrais désactiver autocomplete sans utiliser Javascript.

71
demandé sur Wex 2010-02-02 20:44:00

8 réponses

vous pouvez utiliser un id et name généré à chaque fois, ce qui est différent, de sorte que le navigateur ne peut pas se souvenir de ce champ de texte et ne parviendra pas à suggérer certaines valeurs.

il s'agit au moins de l'alternative sécuritaire cross browser, mais je recommande d'aller avec la réponse de RobertsonM ( autocomplete="off" ).

36
répondu codevour 2014-01-22 11:44:24

en l'état, il n'y a pas d'attribut "autocomplete off" dans CSS. Cependant, html a un code facile pour cela:

<input type="text" id="foo" value="bar" autocomplete="off" />

si vous êtes à la recherche d'un effecteur pour l'ensemble du site, une solution simple serait d'avoir une fonction js pour exécuter toutes les entrées et ajouter cette balise, ou chercher la classe / id CSS correspondante.

l'attribut autocomplete fonctionne bien dans Chrome et Firefox (!), mais Voir aussi y a-t-il un moyen valide W3C pour désactiver autocomplete sous une forme HTML?

111
répondu RobertsonM 2017-05-23 10:31:20

vous pouvez facilement mettre en œuvre par jQuery

$('input').attr('autocomplete','off');
45
répondu ahhmarr 2011-12-28 04:24:25

si vous utilisez un form vous pouvez désactiver tous les autocompletes avec,

<form id="Form1" runat="server" autocomplete="off">
14
répondu Ernest 2014-01-22 22:10:34

CSS n'a pas cette capacité. Vous devez utiliser des scripts côté client.

12
répondu Sampson 2010-02-02 17:45:59

j'ai essayé toutes les façons suggérées à partir de cette question réponses et d'autres articles sur le web, mais ne fonctionne pas de toute façon. J'ai essayé autocomplete= "new-random-value", autocomplete=" off " dans l'élément form, en utilisant le script côté client comme ci-dessous mais en dehors de $(document).ready () comme l'un des utilisateurs l'a mentionné:

$(':input').on('focus', function () {
  $(this).attr('autocomplete', 'off')
});

j'ai trouvé peut-être une autre priorité dans le navigateur causer ce comportement étrange! Donc j'ai cherché plus et finalement, j'ai lu à nouveau attentivement au-dessous des lignes de ce bon article :

pour cette raison, de nombreux navigateurs modernes ne prennent pas en charge autocomplete= "off" pour les champs de connexion:

si un site définit autocomplete= " off " pour a , et que le formulaire inclut nom d'utilisateur et mot de passe champs d'entrée, puis le navigateur offrira encore pour se souvenir de cette connexion, et si l'utilisateur accepte, le navigateur remplissage automatique de ces domaines, la prochaine fois que l'utilisateur visite la page. Si un site de jeux de autocomplete= "off" pour les champs Nom d'utilisateur et mot de passe, alors le navigateur offrira toujours de se souvenir de ce login, et si le l'utilisateur est d'accord, le navigateur va auto-remplir ces champs la prochaine fois que le l'utilisateur visite la page. C'est le comportement dans Firefox (depuis la version 38), Google Chrome (depuis 34), et Internet Explorer (depuis la version 11).

si vous définissez une page de gestion des utilisateurs où un utilisateur peut spécifier nouveau mot de passe pour une autre personne, et donc vous souhaitez empêcher remplissage automatique des champs de mot de passe, vous pouvez utiliser autocomplete=" new-password " .

ça marche. J'ai essayé dans chrome spécialement et j'espère que cela continue à travailler et aider les autres.

3
répondu QMaster 2018-08-22 11:24:03

grâce à la solution de @ahhmarr j'ai pu résoudre le même problème dans mon environnement angle+ui-router , que je partagerai ici pour quiconque est intéressé.

dans mon index.html j'ai ajouté le script suivant:

<script type="text/javascript">
    setTimeout(function() {
        $('input').attr('autocomplete', 'off');
    }, 2000);
</script>

ensuite pour couvrir les changements d'état, j'ai ajouté ce qui suit dans mon contrôleur root:

$rootScope.$on('$stateChangeStart', function() {
                $timeout(function () {
                    $('input').attr('autocomplete', 'off');
                }, 2000);
            });

les timeouts sont pour le rendu html avant d'appliquer le jquery.

si vous trouvez une meilleure solution, faites-le-moi savoir.

1
répondu TrampGuy 2017-05-23 12:09:56
$('input').attr('autocomplete','off');
-3
répondu rohit 2014-08-28 10:07:43