Deaktivieren Sie die automatische Vervollständigung über CSS

93

Ist es möglich, mithilfe von CSS die automatische Vervollständigung für ein Formularelement (insbesondere ein Textfeld) zu deaktivieren?

Ich verwende eine Tag-Bibliothek, die das Autocomplete-Element nicht zulässt, und möchte die Autocomplete ohne Verwendung von Javascript deaktivieren.

David
quelle

Antworten:

52

Sie können ein generiertes idund namejedes Mal verwenden, was anders ist, sodass sich der Browser nicht an dieses Textfeld erinnern kann und einige Werte nicht vorschlagen kann.

Dies ist zumindest die browserübergreifende sichere Alternative, aber ich würde empfehlen, die Antwort von RobertsonM ( autocomplete="off") zu verwenden.

Christopher Klewes
quelle
4
Ein Nebeneffekt davon ist, dass der Browserverlauf mit vielen verschiedenen (zufälligen) Formularfeldern überfüllt ist. Die Suche nach bekannten Werten in den lokalen Datenbanken des Browsers dauert einige Zeit.
Dermatthias
4
Gute Idee, aber es verhindert nicht, dass Kreditkartennummern in der unverschlüsselten Datenbank für die automatische Vervollständigung gespeichert werden.
Hans-Peter Störr
Wenn Sie keine statischen Steuerelementnamen /--IDs verwenden, wird die Skripterstellung und die Formulardatenerfassung ebenfalls unterbrochen (es sei denn, jeder Aspekt Ihrer Anwendung kennt die neue Namenskonvention und aktualisiert auch die Skripterstellung / Datenerfassung dynamisch ).
Gary Richter
Wenn Sie die automatische Vervollständigung vermeiden müssen, ist das "Randomisieren" der Feldnamen der einzig richtige Weg. Die Verwendung eines Hinweises wie autocomplete="off"wird in der Browser X-Version (aktuell + 1) ignoriert. (Zum Beispiel ignorieren die neuesten Google Chrome Autocomplete = off.)
Mikko Rantalainen
@kmoser: Selbst wenn Sie die Autocomplete-Funktion des Browsers durch Randomisierung von Elementen deaktivieren id, wird sie dennoch im Cache gespeichert (dh auf der Festplatte eines Benutzers). Dies ist eine schreckliche Sache, wenn Sie die Kreditkartennummer oder andere vertrauliche Informationen einer Person ändern. Darüber hinaus werden die Festplatten Ihres Benutzers unnötig überladen. Jedes Mal, wenn sie Ihre Seite besuchen, wird eine neue (Cookie-ähnliche) Datei auf ihrem Computer gespeichert. Versuchen Sie zum Teufel, Ihren Chrome-Cache zu leeren und zu sehen, wie viel Speicherplatz frei wird (wenn Sie dies eine Weile nicht getan haben). Deshalb nenne ich es eine schreckliche Idee.
c00000fd
128

Derzeit gibt es in CSS kein Attribut "Autocomplete off". HTML hat jedoch einen einfachen Code dafür:

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

Wenn Sie nach einem Site-weiten Effektor suchen, ist es einfach, einfach eine js-Funktion zu haben, um alle 'Eingaben' zu durchlaufen und dieses Tag hinzuzufügen, oder nach der entsprechenden CSS-Klasse / ID zu suchen.

Das Attribut "Autocomplete" funktioniert in Chrome und Firefox (!) Einwandfrei. Siehe auch " Gibt es eine W3C-gültige Möglichkeit, die Autocomplete in einem HTML-Formular zu deaktivieren?"

RobertsonM
quelle
4
developer.mozilla.org/en-US/docs/Web/Security/… schlägt vor, dass autocomplete="anyrandominvalidvalue"es funktionieren wird.
Andrew Stalker
49

Sie können einfach mit jQuery implementieren

$('input').attr('autocomplete','off');
ahhmarr
quelle
4
In den meisten Fällen $ ('form'). Attr ('autocomplete', 'off'); ist viel effizienter (siehe Kommentar zu einer Antwort unten)
irakli
@irakli In meinem Fall ist die Verwendung formdas EINZIGE, was funktioniert hat. Nicht input. Vielen Dank.
Khaverim
1
Hallo, 2018 und dies ist fast der einzige Weg, wie ich das heutzutage zum Laufen bringen kann. Auch @irakli dies ist wahr, wenn Sie auf einem ganzen Formular uns das Formular als Selektor verwenden müssen.
Devon Kiss
15

Wenn Sie ein verwenden form, können Sie alle Autovervollständigungen mit deaktivieren.

<form id="Form1" runat="server" autocomplete="off">
Ernest
quelle
In der Tat laut Mozilla: "Wenn das Attribut für die automatische Vervollständigung nicht für ein Eingabeelement angegeben ist, verwendet der Browser den Attributwert für die automatische Vervollständigung des Formulareigners des <input> -Elements. Der Formulareigentümer ist entweder das Formularelement, das dieses <input> -Element ist Ein Nachkomme oder das Formularelement, dessen ID durch das Formularattribut des Eingabeelements angegeben wird. Weitere Informationen finden Sie im Attribut für die automatische Vervollständigung in <Formular>. " In Anbetracht dessen wäre eine viel effizientere jQuery-Alternative zu der oben gezeigten: $ ('form'). attr ('autocomplete', 'off');
irakli
13

CSS verfügt nicht über diese Fähigkeit. Sie müssten clientseitiges Scripting verwenden.

Sampson
quelle
1
Irgendeine Idee, wie man dies in Edge deaktiviert? Egal was wir tun, wir sehen es.
Benjamin Gruenbaum
@BenjaminGruenbaum Using autocomplete="false"funktioniert in Edge. Technisch gesehen kann hier jeder ungültige Wert anstelle von "false" verwendet werden.
Andrew
4

Ich habe alle vorgeschlagenen Möglichkeiten aus diesen Fragen, Antworten und anderen Artikeln im Web ausprobiert, aber trotzdem nicht funktioniert. Ich habe versucht, autocomplete = "new-random-value", autocomplete = "off" im Formularelement zu verwenden, wobei ich das clientseitige Skript wie folgt, jedoch außerhalb von $ (document) .ready () als einen der genannten Benutzer verwendet habe:

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

Ich fand vielleicht eine andere Priorität im Browser, die dieses seltsame Verhalten verursacht! Also habe ich mehr gesucht und schließlich habe ich die folgenden Zeilen dieses guten Artikels noch einmal sorgfältig gelesen :

Aus diesem Grund unterstützen viele moderne Browser autocomplete = "off" für Anmeldefelder nicht:

Wenn eine Site autocomplete = "off" für a setzt und das Formular Eingabefelder für Benutzername und Kennwort enthält, bietet der Browser weiterhin an, sich diese Anmeldung zu merken. Wenn der Benutzer zustimmt, füllt der Browser diese Felder beim nächsten Mal automatisch aus besucht die Seite. Wenn eine Site autocomplete = "off" für Benutzernamen- und Kennwortfelder setzt, bietet der Browser weiterhin an, sich diese Anmeldung zu merken, und wenn der Benutzer zustimmt, füllt der Browser diese Felder beim nächsten Besuch der Seite automatisch aus. Dies ist das Verhalten in Firefox (seit Version 38), Google Chrome (seit 34) und Internet Explorer (seit Version 11).

Wenn Sie eine Benutzerverwaltungsseite definieren, auf der ein Benutzer ein neues Kennwort für eine andere Person angeben kann und daher das automatische Ausfüllen von Kennwortfeldern verhindern möchten, können Sie autocomplete = "new-password" verwenden . Die Unterstützung für diesen Wert wurde in Firefox jedoch nicht implementiert.

Es hat einfach funktioniert. Ich habe es speziell in Chrom versucht und hoffe, dass dies weiterhin funktioniert und anderen hilft.

QMaster
quelle
1

Ich habe das Problem gelöst, indem ich für alle Eingaben einen falschen Namen für die automatische Vervollständigung hinzugefügt habe.

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

Dank der Lösung von @ ahhmarr konnte ich das gleiche Problem in meiner Angular + UI-Router- Umgebung lösen , das ich hier für alle Interessierten freigeben werde.

In meinem index.htmlhabe ich folgendes Skript hinzugefügt:

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

Um Statusänderungen abzudecken, habe ich meinem Root-Controller Folgendes hinzugefügt:

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

Die Zeitüberschreitungen müssen vom HTML-Code gerendert werden, bevor die JQuery angewendet wird.

Wenn Sie eine bessere Lösung finden, lassen Sie es mich bitte wissen.

TrampGuy
quelle
0

Sie können CSS nicht verwenden, um die automatische Vervollständigung zu deaktivieren, aber Sie können HTML verwenden:

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

Technisch können Sie durch falseeinen ungültigen Wert ersetzen und es wird funktionieren. Dieses iOS ist die einzige Lösung, die ich gefunden habe und die auch in Edge funktioniert.

Andrew
quelle
0

Es gibt 3 Möglichkeiten, ich erwähne sie, um der bessere Weg zu sein ...

1-HTML-Weg:

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

2-Javascript Weg:

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

3-jQuery Weg:

$('input').attr('autocomplete','off');
Sina
quelle
0

Ich benutze 'new-password'stattdessen nur die 'off'automatische Vervollständigung.

und ich habe auch versucht, diesen Code zu verwenden und funktioniert (zumindest auf meiner Seite), ich verwende WP und GravityForm zu Ihrer Information

$('input').attr('autocomplete','new-password');
Kusukacoklat
quelle
-5
$('input').attr('autocomplete','off');
Rohit
quelle
3
Dies gibt keine Antwort auf die gestellte Frage. OP hat speziell nach einer CSS-Lösung gefragt. Außerdem ist dies genau die gleiche Antwort wie eine bereits vorhandene.
Holger Nur