React nie wyłącza autouzupełniania


83

Jak sprawić, by zareagował, wyrenderuj to?

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

Odpowiedzi:


158

Wielkie „C” autoComplete. Jest to wspomniane w dokumentacji Reacta:

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


16
Zawsze zgłaszaj wyjątek, a nie tylko po cichu ignoruj ​​błędy.
— Jarosław

1
@Yaroslav Możliwe, że React rzuca ostrzeżenie, jeśli nie, to github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/…
— azium

1
Ale też nie jest to błąd, ponieważ rekwizyty mogą być czymkolwiek ... skąd React wie, kiedy tworzysz własny rekwizyt lub używasz atrybutu HTML?
— azium

Rekwizyty nie mogą być niczym w przypadku tagów HTML.
— Jarosław

Rozumiem, dlaczego myślisz, że tak jest, ale pamiętaj, że tagi JSX są transponowane do wywołań funkcji za pomocą ciągu znaków reprezentującego typ tagu.
— azium

67

Powinieneś umieścić:

autoComplete="new-password"

Spowoduje to usunięcie autouzupełniania


13
Naprawdę nie rozumiem, dlaczego to działa zamiast „wyłączyć”. Dziwne.
— Ajay


@Pim Ma sens. Dzięki!
— Ajay

1
Jesteś legendą, dzięki! Ma to również sens, chciałem, aby moje pole nowego hasła nie było automatycznie uzupełniane: D
— Erik Kubica

Prawdopodobnie chrome rozpoznaje neww nazwie. Nazwałam to teraz, autoComplete="new-off"co ma dla mnie trochę więcej sensu, jeśli nie jest to pole hasła i działa dobrze: D
— kenny

7

Zgodnie z dokumentacją Mozilli , musisz ustawić nieprawidłową wartość, aby naprawdę wyłączyć autouzupełnianie. W niektórych przeglądarkach sugestie autouzupełniania są nadal podawane, mimo że atrybut jest wyłączony.

To zadziałało dla mnie (reakcja-bootstrap):

<FormControl
  value={this.state.value}
  autoComplete="nope"
  {...props}
/>

Wow, to dziwne, ale to jedyna rzecz, która do tej pory działała dla mnie.
— Wylliam Judd

1
@Pim Mmm czy to to samo autocompletei autofill? Ponieważ nie działa u mnie na Chrome. Wciąż automatycznie wypełnia formularz poprzednimi wartościami przesłanymi z tego samego formularza.
— alexventuraio

6

Jeśli przeczytałeś poprawną odpowiedź i nadal masz ten problem (szczególnie w Chrome), witaj w klubie ... więc sprawdź, jak to zrobiłem:

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

Uwagi

  • forma niekoniecznie musi być bezpośrednim rodzicem elementu wejściowego
  • wejście wymaga atrybutu nazwy
  • działa również z <FormControl/>tagiem React-Bootstrap (zamiast <input/>)

To nie działa. Próbuję z Chrome 67. Nic. Nadal potrzebuję fałszywego wejścia z wyświetlaczem: brak! Bardzo szalony!

dziękuję za informację zwrotną, ale czy w Twojej sprawie zaznaczono wszystkie 3 punktory?
— w3jimmy

W niektórych przypadkach nadal otrzymywałem autosugestie. Zobacz moją odpowiedź, aby uzyskać bardziej kompletne rozwiązanie.
— Pim

5

Żadne z tych rozwiązań tak naprawdę nie działało na Chrome 80.

Po godzinach prób i błędów ten bardzo dziwny hack zadziałał dla mnie:

  1. Dodaj autoComplete="none"do każdego<input> - Google pomija teraz autocomplete = "off"
  2. Owiń pola w kontenerze: <form>lub<div>
  3. Potrzebujesz co najmniej jednego prawidłowego pola wejściowego z autoComplete="on". Powinien to być ostatni element w kontenerze. Więc dodałem następujące pole wejściowe na dole mojego formularza:
<input 
  type="text" 
  autoComplete="on" 
  value="" 
  style={{display: 'none', opacity: 0, position: 'absolute', left: '-100000px'}} 
  readOnly={true}
/>

3

autoComplete = "none" - działa dla mnie.


2
Witaj Alex. Postaraj się odpowiedzieć bardziej szczegółowo. Ważne jest, aby zastanowić się, czy rozwiązanie działa ze względu na wielkość „autouzupełniania”.
— Jennifer Goncalves,


0

Oprócz odpowiedzi @ azium <input>należy umieścić w <form>tagu, a następnie autoCompletedziała


0

Rozwiązałem to za pomocą tylko jednej linii:

Jeśli używasz zalecanego sposobu z "changeHandler ()" i stanem komponentów, po prostu wstaw:

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

Więcej informacji o tej zmianieHandler () - Rzecz:
https://reactjs.org/docs/forms.html#controlled-components


2
kiedy Google Chrome automatycznie wypełnia moje dane, e.isTrusted is true: D
— IvanY

0

Wypróbowałem także wiele opcji, ale skończyło się na tym, że zastąpiłem <form>tag <div>tagiem i ręcznie zarządzałem każdym wejściem, które miałem w tej formie.


0

Oto komunikat „To działa na moim komputerze”

Chrome w wersji 83.0.4103.116 i React. Wygląda na to, że sztuczka, która zadziałała w moim przypadku, polega na umieszczeniu go w formularzu i dodaniu atrybutu autoComplete . Uwaga Jeśli spróbujesz tego w aplikacji niereagującej, będziesz musiał wykonać autouzupełnianie małą literą C

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

i

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

0

Tak, większość sugestii tutaj i gdzie indziej nie powiodła się w grudniu 2020 r.
Myślę, że wypróbowałem je wszystkie, opakowanie formularzy, ustawienie autouzupełniania na „wyłączone” z „nowego hasła” (żadne z nich nie działało), wybranie onFocus, upewnienie się, że używam autouzupełniania i nie autouzupełnianie (nie wielkie litery), ale żadne z nich nie pomogło.

W końcu podejście mscott2005 zadziałało (+1) dla mnie, ale poprawiłem je również, aby uzyskać bardziej minimalny przykład, który publikuję jako odpowiedź dla innych:

Nie był potrzebny żaden formularz, tylko dwa znaczniki wejściowe:

  • autocomplete = "off" na wybranym polu

    <input ... autoComplete="off" />

  • autocomplete = "on" na fałszywym ukrytym polu

    <input

    id="fake-hidden-input-to-stop-google-address-lookup"
    autoComplete="on"
    style={{ display: 'none'}}>
    

Identyfikator jest najlepszym, jaki mam, do dokumentowania tego, co naprawdę jest włamaniem, bez użycia komentarza.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.