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}/>

Antworten:


157

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

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


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


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}
/>

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/>)

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.


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}
/>

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


0

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


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


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.


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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.