React macht die automatische Vervollständigung nicht deaktiviert

82

Wie kann ich reagieren lassen, um es zu rendern?

<input
    id={field.name}
    className="form-control"
    type="text"
    placeholder={field.name}
    autocomplete="off"
    {...field}/>
Jaroslaw
quelle

Antworten:

157

Großbuchstabe "C" autoComplete. Dies wird in der React-Dokumentation erwähnt:

https://facebook.github.io/react/docs/tags-and-attributes.html

Azium
quelle
16
Wirf immer eine Ausnahme und ignoriere Fehler nicht nur stillschweigend.
Jaroslaw
1
@ Jaroslaw Es ist möglich, dass React eine Warnung dafür
auslöst
1
Aber es ist auch kein Fehler, denn Requisiten können alles sein. Woher weiß React, wann Sie Ihre eigenen Requisiten erstellen oder ein HTML-Attribut verwenden?
Azium
Requisiten können nichts für HTML-Tags sein.
Jaroslaw
Ich verstehe, warum Sie denken, dass dies der Fall ist, aber denken Sie daran, dass diese JSX-Tags in Funktionsaufrufe mit einer Zeichenfolge transpiliert werden, die den Tag-Typ darstellt.
Azium
66

Sie sollten setzen:

autoComplete="new-password"

Dadurch wird die automatische Vervollständigung entfernt

JpCrow
quelle
13
Ich verstehe wirklich nicht, warum das funktioniert, anstatt "aus". Seltsam.
Ajay
@Pim macht Sinn. Vielen Dank!
Ajay
1
Du bist eine Legende, danke! Es macht auch Sinn, dass mein neues Passwortfeld nicht automatisch vervollständigt wird: D
Erik Kubica
Wahrscheinlich erkennt Chrom das newim Namen. Ich habe es jetzt benannt autoComplete="new-off", was für mich etwas sinnvoller ist, wenn es kein Passwortfeld ist und es gut funktioniert: D
kenny
7

Laut Mozilla-Dokumentation müssen Sie einen ungültigen Wert festlegen, um die automatische Vervollständigung wirklich auszuschalten. In einigen Browsern werden weiterhin Vorschläge zur automatischen Vervollständigung gegeben, obwohl das Attribut deaktiviert ist.

Das hat bei mir funktioniert (React-Bootstrap):

<FormControl
  value={this.state.value}
  autoComplete="nope"
  {...props}
/>
Pim
quelle
Wow, das ist komisch, aber es ist das einzige, was bisher für mich funktioniert hat.
Wylliam Judd
1
@Pim Mmm ist es das gleiche autocompleteund autofill? Weil es bei mir mit Chrome nicht funktioniert. Das Formular wird weiterhin automatisch mit vorherigen Werten ausgefüllt, die mit demselben Formular gesendet wurden.
Alexventuraio
6

Wenn Sie die richtige Antwort gelesen haben und dieses Problem weiterhin haben (insbesondere in Chrome), heißen wir Sie im Club willkommen. Überprüfen Sie also, wie ich es erreicht habe:

<form autoComplete="new-password" ... >
        <input name="myInput" type="text" autoComplete="off" id="myInput" placeholder="Search field" />
</form>

Anmerkungen

  • form muss nicht unbedingt das direkte übergeordnete Element des Eingabeelements sein
  • Eingabe benötigt ein Namensattribut
  • es funktioniert auch mit React-Bootstrap- <FormControl/>Tag (anstelle von <input/>)
w3jimmy
quelle
Es funktioniert nicht. Ich versuche es mit Chrome 67. Nichts. Ich brauche noch eine gefälschte Eingabe mit Anzeige: keine! Sehr verrückt!
Vielen Dank für Ihr Feedback.
w3jimmy
In einigen Fällen bekam ich immer noch Autosuggestions damit. Siehe meine Antwort für eine vollständigere Lösung.
Pim
3

autoComplete = "none" - funktioniert bei mir.

Alexander Utrobin
quelle
2
Willkommen Alex. Versuchen Sie, Ihre Antwort ausführlicher zu formulieren. Es ist wichtig herauszufinden, dass Ihre Lösung aufgrund des Gehäuses von "autoComplete" funktioniert.
Jennifer Goncalves
3

Keine dieser Lösungen funktionierte wirklich auf Chrome 80.

Nach stundenlangem Ausprobieren hat dieser sehr seltsame Hack für mich funktioniert:

  1. In autoComplete="none"die jedem <input>- Google überspringt die automatische Vervollständigung = „off“ jetzt
  2. Wickeln Sie Ihre Felder in einen Container: <form>oder<div>
  3. Sie benötigen mindestens ein gültiges Eingabefeld mit autoComplete="on". Dies sollte das letzte Element im Container sein. Deshalb habe ich das folgende Eingabefeld am Ende meines Formulars hinzugefügt:
<input 
  type="text" 
  autoComplete="on" 
  value="" 
  style={{display: 'none', opacity: 0, position: 'absolute', left: '-100000px'}} 
  readOnly={true}
/>
mscott2005
quelle
1

Die Hölle der automatischen Vervollständigung von Chrome wird durch Hinzufügen eines neuen Kennwortattributs deaktiviert.

autoComplete="new-password"

In Aktion sieht es so aus:

<input            
type="password"
autoComplete="new-password"
/>

Weitere Diskussion über:

Chrome AutoComplete-Diskussion

Saqy G.
quelle
0

Zusätzlich zur Antwort von @ azium <input>sollte in das <form>Tag eingefügt werden , dann autoCompletefunktioniert

Monsoir
quelle
0

Ich habe es mit nur einer Zeile gelöst:

Wenn Sie die empfohlene Methode mit "changeHandler ()" und dem Komponentenstatus verwenden, fügen Sie einfach Folgendes ein:

changeHandler = (e) => {    
  if (!e.isTrusted) return;
  ... your code
}

Weitere Informationen zu dieser ÄnderungHandler () - Sache:
https://reactjs.org/docs/forms.html#controlled-components

Marcel Ennix
quelle
2
Wenn Google Chrome meine Eingabe automatisch ausfüllt, ist e.isTrusted wahr: D
IvanY
0

Ich habe auch viele Optionen ausprobiert, aber am Ende habe ich das <form>Tag durch ein <div>Tag ersetzt und jede Eingabe, die ich in diesem Formular hatte, manuell verwaltet.

radu ghitescu
quelle
0

Hier ist das "Es funktioniert auf meinem Computer"

Chrome Version 83.0.4103.116 und Reagieren. Der Trick, der bei mir funktioniert hat, besteht darin, ihn in ein Formular einzufügen und das Attribut autoComplete hinzuzufügen . Hinweis Wenn Sie dies in einer nicht reagierenden App versuchen, müssen Sie die automatische Vervollständigung mit einem Kleinbuchstaben C durchführen

 <form autoComplete="off">
      <input type="text" autoComplete="new-password" />
 </form>

und

<form autoComplete="new-password">
  <input type="text" autoComplete="new-password" />
</form>
Devpato
quelle