Wyłącz autouzupełnianie przez CSS


94

Czy można użyć CSS, aby wyłączyć autouzupełnianie w elemencie formularza (w szczególności w polu tekstowym)?

Używam biblioteki tagów, która nie pozwala na element autouzupełniania i chciałbym wyłączyć autouzupełnianie bez używania JavaScript.

Odpowiedzi:


52

Możesz użyć wygenerowanego idi nameza każdym razem, który jest inny, więc przeglądarka nie pamięta tego pola tekstowego i nie zasugeruje niektórych wartości.

Jest to przynajmniej bezpieczna alternatywa dla różnych przeglądarek, ale polecam skorzystać z odpowiedzi od RobertsonM ( autocomplete="off").


4
Efektem ubocznym jest to, że historia przeglądarki jest zaśmiecona wieloma różnymi (losowymi) polami formularzy. Każde wyszukiwanie znanych wartości w lokalnych bazach danych przeglądarek zajmie trochę czasu.
dermatthias

4
Niezły pomysł, ale nie zapobiega zapisywaniu numerów kart kredytowych w niezaszyfrowanej bazie danych autouzupełniania.
Hans-Peter Störr,

Jeśli nie używasz statycznych nazw / identyfikatorów kontrolek, wszelkie skrypty zostaną zepsute, a zbieranie danych z formularzy również ulegnie uszkodzeniu (chyba że każdy aspekt twojej aplikacji jest świadomy nowej konwencji nazewnictwa i dynamicznie aktualizuje również wszelkie skrypty / zbieranie danych ).
Gary Richter

I musisz unikać autouzupełniania, „losowanie” nazw pól to jedyna prawdziwa droga. Używanie jakiejkolwiek wskazówki, takiej jak, autocomplete="off"będzie ignorowane w wersji przeglądarki X (bieżąca + 1). (Na przykład najnowsza przeglądarka Google Chrome ignoruje autocomplete = off.)
Mikko Rantalainen

@kmoser: Nawet jeśli pokonasz funkcję autouzupełniania przeglądarki przez losowanie elementu id, nadal zapisze go w pamięci podręcznej (tj. na dysku twardym użytkownika). Co jest okropną rzeczą zrobić z czyimś numerem karty kredytowej lub innymi poufnymi informacjami. Ponadto niepotrzebnie zaśmieca dyski twarde użytkownika. Za każdym razem, gdy odwiedzą Twoją stronę, nowy plik (podobny do pliku cookie) zostanie zapisany na ich komputerze. Po prostu spróbuj wyczyścić pamięć podręczną Chrome i zobacz, ile miejsca zwolni (jeśli nie robiłeś tego przez jakiś czas). Dlatego nazywam to okropnym pomysłem.
c00000fd

129

W obecnej postaci w CSS nie ma atrybutu „autouzupełnianie wyłączone”. Jednak HTML ma do tego łatwy kod:

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

Jeśli szukasz efektora obejmującego całą witrynę, prostym rozwiązaniem byłoby posiadanie funkcji js, która przeszłaby przez wszystkie „dane wejściowe” i dodała ten znacznik lub poszukałaby odpowiedniej klasy / identyfikatora CSS.

Atrybut autouzupełniania działa dobrze w Chrome i Firefox (!), Ale zobacz także Czy istnieje poprawny sposób W3C na wyłączenie autouzupełniania w formularzu HTML?


4
developer.mozilla.org/en-US/docs/Web/Security/ ... sugeruje, autocomplete="anyrandominvalidvalue"że zadziała.
Andrew Stalker

49

możesz łatwo wdrożyć przez jQuery

$('input').attr('autocomplete','off');

4
W większości przypadków $ ('form'). Attr ('autocomplete', 'off'); jest znacznie bardziej wydajna (patrz komentarz do odpowiedzi poniżej)
irakli

@irakli W moim przypadku używanie formjest JEDYNĄ rzeczą, która zadziałała. Nie input. Dzięki.
khaverim

1
Cześć, 2018 rok i to jest prawie jedyny sposób, w jaki mogę to zrobić w dzisiejszych czasach. Również @irakli jest to prawdą, jeśli chcesz użyć w całym formularzu formularza jako selektora.
Devon Kiss

15

Jeśli używasz form, możesz wyłączyć wszystkie autouzupełnianie za pomocą,

<form id="Form1" runat="server" autocomplete="off">

w istocie według Mozilli: "Jeśli atrybut autocomplete nie jest określony w elemencie wejściowym, przeglądarka używa wartości atrybutu autocomplete właściciela formularza elementu <input>. Właścicielem formularza jest albo element formularza, który ten element <input> jest element podrzędny lub element formularza, którego identyfikator jest określony przez atrybut formularza elementu wejściowego. Aby uzyskać więcej informacji, zobacz atrybut autouzupełniania w <form>. " biorąc pod uwagę to, o wiele bardziej efektywną alternatywą jQuery w stosunku do pokazanego powyżej byłoby: $ ('form'). attr ('autocomplete', 'off');
irakli

13

CSS nie ma takiej możliwości. Musisz użyć skryptów po stronie klienta.


1
Masz jakiś pomysł, jak to wyłączyć na krawędzi? Bez względu na to, co robimy, widzimy to.
Benjamin Gruenbaum

@BenjaminGruenbaum Używanie autocomplete="false"będzie działać w Edge. Technicznie rzecz biorąc, każda nieprawidłowa wartość może zostać zastąpiona tutaj wartością „false”.
Andrew

4

Wypróbowałem wszystkie sugerowane sposoby z tych odpowiedzi na pytania i innych artykułów w Internecie, ale i tak nie działałem. Próbowałem autocomplete = "new-random-value", autocomplete = "off" w elemencie formularza, używając skryptu po stronie klienta, jak poniżej, ale poza $ (document) .ready (), jak wspomniał jeden z użytkowników:

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

Znalazłem może inny priorytet w przeglądarce, który powoduje to dziwne zachowanie! Szukałem więc więcej i na koniec ponownie uważnie przeczytałem poniższe wiersze z tego dobrego artykułu :

Z tego powodu wiele nowoczesnych przeglądarek nie obsługuje funkcji autocomplete = "off" dla pól logowania:

Jeśli witryna ustawia autocomplete = "off" na a, a formularz zawiera pola do wprowadzania nazwy użytkownika i hasła, przeglądarka nadal będzie oferować zapamiętanie tego loginu, a jeśli użytkownik wyrazi zgodę, automatycznie wypełni te pola następnym razem, gdy użytkownik odwiedza stronę. Jeśli witryna ustawi autocomplete = "off" dla pól nazwy użytkownika i hasła, przeglądarka nadal będzie oferować zapamiętanie tego loginu, a jeśli użytkownik wyrazi zgodę, automatycznie wypełni te pola przy następnej wizycie użytkownika na stronie. Tak jest w Firefoksie (od wersji 38), Google Chrome (od 34) i Internet Explorerze (od wersji 11).

Jeśli definiujesz stronę zarządzania użytkownikami, na której użytkownik może określić nowe hasło dla innej osoby, a zatem chcesz zapobiec automatycznemu wypełnianiu pól hasła, możesz użyć funkcji autocomplete = "nowe-hasło" ; jednak obsługa tej wartości nie została zaimplementowana w przeglądarce Firefox.

Po prostu zadziałało. Próbowałem specjalnie w chrome i mam nadzieję, że to nadal działa i pomaga innym.


1

Rozwiązałem problem, dodając fałszywą nazwę autouzupełniania dla wszystkich danych wejściowych.

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

1

Są na to 3 sposoby, wymieniam je, aby być lepszym ...

Sposób 1-HTML:

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

Sposób 2-Javascript:

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

3-jQuery sposób:

$('input').attr('autocomplete','off');

0

Dzięki rozwiązaniu @ ahhmarr udało mi się rozwiązać ten sam problem w moim środowisku Angular + ui-router , którym podzielę się tutaj dla wszystkich zainteresowanych.

W moim index.htmldodałem następujący skrypt:

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

Następnie, aby uwzględnić zmiany stanu, w moim kontrolerze głównym dodałem:

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

Limity czasu mają być renderowane przez kod HTML przed zastosowaniem jquery.

Jeśli znajdziesz lepsze rozwiązanie, daj mi znać.


0

Nie możesz użyć CSS do wyłączenia autouzupełniania, ale możesz użyć HTML:

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

Technicznie rzecz biorąc, możesz zastąpić falsedowolną nieprawidłową wartością i zadziała. To jedyne rozwiązanie, które znalazłem na iOS, które działa również w Edge.


0

Po prostu używam 'new-password'zamiast 'off'autouzupełniania.

i też spróbuję użyć tego kodu i działa (przynajmniej z mojej strony), używam WP i GravityForm dla twoich informacji

$('input').attr('autocomplete','new-password');

-5
$('input').attr('autocomplete','off');

3
To nie daje odpowiedzi na zadane pytanie. OP specjalnie poprosił o rozwiązanie CSS, a także jest to dokładnie ta sama odpowiedź, co już istniejące.
Holger Just
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.