Désactiver la saisie semi-automatique via CSS

94

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

J'utilise une bibliothèque de balises qui n'autorise pas l'élément de saisie semi-automatique et je souhaite désactiver la saisie semi-automatique sans utiliser Javascript.

David
la source

Réponses:

52

Vous pouvez utiliser un généré idet à namechaque fois, qui est différent, de sorte que le navigateur ne peut pas se souvenir de ce champ de texte et ne pourra pas suggérer certaines valeurs.

C'est au moins l'alternative sûre pour tous les navigateurs, mais je recommanderais d'aller avec la réponse de RobertsonM ( autocomplete="off").

Christopher Klewes
la source
4
Un effet secondaire de ceci est que l'historique du navigateur est encombré de nombreux champs de formulaire (aléatoires) différents. Chaque recherche de valeurs connues dans la base de données locale du navigateur prendra un certain temps.
dermatthies
4
Bonne idée, mais cela n'empêche pas les numéros de carte de crédit d'être enregistrés dans la base de données de saisie semi-automatique non chiffrée.
Hans-Peter Störr
Si vous n'utilisez pas de noms / identifiants de contrôle statiques, tout script sera interrompu et toute collecte de données de formulaire sera également interrompue (à moins que chaque aspect de votre application soit conscient de la nouvelle convention de dénomination et met également à jour dynamiquement tout script / collection de données. ).
Gary Richter
Si vous devez éviter la saisie semi-automatique, "randomiser" les noms de champs est la seule vraie solution. L'utilisation de toute indication comme celle autocomplete="off"-ci sera ignorée dans la version du navigateur X (+ 1 actuel). (Par exemple, la dernière version de Google Chrome ignore la saisie semi-automatique = off.)
Mikko Rantalainen
@kmoser: Même si vous désactivez la fonction de saisie semi-automatique du navigateur en randomisant l'élément, idil l'enregistrera toujours dans le cache (c'est-à-dire sur le disque dur d'un utilisateur.) Ce qui est une chose horrible à faire avec le numéro de carte de crédit de quelqu'un ou toute autre information sensible. En outre, il encombre inutilement les lecteurs de disque de votre utilisateur. Chaque fois qu'ils visitent votre page, un nouveau fichier (semblable à un cookie) sera enregistré sur leur ordinateur. Juste pour le plaisir, essayez de vider votre cache Chrome et de voir combien d'espace cela va libérer (si vous ne l'avez pas fait depuis un certain temps). C'est pourquoi j'appelle cela une idée horrible.
c00000fd
129

Dans l'état actuel des choses, il n'y a pas d'attribut «Autocomplete Off» dans CSS. Cependant, html a un code simple pour cela:

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

Si vous cherchez un effecteur à l'échelle du site, une solution simple serait d'avoir simplement une fonction js pour exécuter toutes les entrées et ajouter cette balise, ou chercher la classe / id css correspondante.

L'attribut de saisie semi-automatique fonctionne correctement dans Chrome et Firefox (!), Mais consultez également Existe-t-il un moyen valide du W3C pour désactiver la saisie semi-automatique dans un formulaire HTML?

RobertsonM
la source
4
developer.mozilla.org/en-US/docs/Web/Security/… suggère que autocomplete="anyrandominvalidvalue"cela fonctionnera.
Andrew Stalker
49

vous pouvez facilement implémenter par jQuery

$('input').attr('autocomplete','off');
Ahhmarr
la source
4
Dans la majorité des cas, $ ('form'). Attr ('autocomplete', 'off'); est beaucoup plus efficace (voir le commentaire d'une réponse ci-dessous)
irakli
@irakli Dans mon cas, utiliser formest la SEULE chose qui a fonctionné. Non input. Merci.
khaverim
1
Salut, 2018 et c'est à peu près le seul moyen que je puisse faire fonctionner ces jours-ci. De plus, @irakli c'est vrai si vous devez utiliser sur un formulaire entier le formulaire comme sélecteur.
Devon Kiss le
15

Si vous utilisez un, formvous pouvez désactiver toutes les saisies automatiques avec,

<form id="Form1" runat="server" autocomplete="off">
Ernest
la source
en effet, pour Mozilla: "Si l'attribut autocomplete n'est pas spécifié sur un élément d'entrée, le navigateur utilise alors la valeur d'attribut autocomplete du propriétaire du formulaire de l'élément <input>. Le propriétaire du formulaire est soit l'élément de formulaire que cet élément <input> est un descendant de ou de l'élément de formulaire dont l'ID est spécifié par l'attribut form de l'élément d'entrée. Pour plus d'informations, consultez l'attribut de saisie semi-automatique dans <form>. " considérant cela comme une alternative jQuery beaucoup plus efficace que celle présentée ci-dessus serait: $ ('form'). attr ('autocomplete', 'off');
irakli
13

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

Sampson
la source
1
Une idée comment désactiver cela dans le bord? Peu importe ce que nous faisons, nous le voyons.
Benjamin Gruenbaum
@BenjaminGruenbaum Using autocomplete="false"fonctionnera dans Edge. Techniquement, toute valeur invalide peut remplacer "false" ici.
Andrew
4

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

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

J'ai trouvé peut-être une autre priorité dans le navigateur à cause de ce comportement étrange! J'ai donc cherché plus et finalement, j'ai relu attentivement les lignes ci-dessous 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 comprend des champs de saisie de nom d'utilisateur et de mot de passe, le navigateur proposera toujours de se souvenir de cette connexion, et si l'utilisateur accepte, le navigateur remplira automatiquement ces champs la prochaine fois que l'utilisateur visite la page. Si un site définit autocomplete = "off" pour les champs de nom d'utilisateur et de mot de passe, le navigateur proposera toujours de se souvenir de cette connexion, et si l'utilisateur l'accepte, le navigateur remplira automatiquement ces champs la prochaine fois que l'utilisateur visitera la page. C'est le comportement de 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 dans laquelle un utilisateur peut spécifier un nouveau mot de passe pour une autre personne et que vous souhaitez par conséquent empêcher le remplissage automatique des champs de mot de passe, vous pouvez utiliser autocomplete = "new-password" ; cependant, la prise en charge de cette valeur n'a pas été implémentée sur Firefox.

Cela a juste fonctionné. J'ai spécialement essayé Chrome et j'espère que cela continuera de fonctionner et d'aider les autres.

QMaster
la source
1

J'ai résolu le problème en ajoutant un faux nom de saisie semi-automatique pour toutes les entrées.

$("input").attr("autocomplete", "fake-name-disable-autofill");
Webdma
la source
0

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

Dans mon index.htmlj'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 racine:

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

Les délais d'attente sont pour le html à rendre avant d'appliquer la jquery.

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

TrampGuy
la source
0

Vous ne pouvez pas utiliser CSS pour désactiver la saisie semi-automatique, mais vous pouvez utiliser HTML:

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

Techniquement, vous pouvez remplacer falsepar une valeur non valide et cela fonctionnera. Cet iOS est la seule solution que j'ai trouvée qui fonctionne également dans Edge.

Andrew
la source
0

Il y a 3 façons d'y arriver, je les mentionne par ordre d'être la meilleure façon ...

Manière 1-HTML:

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

2-Javascript manière:

document.getElementById("input-id").getAttribute("autocomplete") = "off";

Manière 3-jQuery:

$('input').attr('autocomplete','off');
sina
la source
0

J'utilise juste à la 'new-password'place 'off'sur la saisie semi-automatique.

et j'ai aussi essayé d'utiliser ce code et fonctionne (du moins de mon côté), j'utilise WP et GravityForm pour votre information

$('input').attr('autocomplete','new-password');
Kusukacoklat
la source
-5
$('input').attr('autocomplete','off');
rohit
la source
3
Cela ne répond pas à la question posée. OP a spécifiquement demandé une solution CSS. En outre, c'est exactement la même réponse qu'une déjà existante.
Holger juste