2010-02-02 18 views
65

Czy można wyłączyć funkcję autouzupełniania w elemencie formularza (szczególnie w polu tekstowym) za pomocą CSS?Wyłącz autouzupełnianie za pomocą CSS

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

Odpowiedz

31

Możesz użyć wygenerowanego id i name za każdym razem, co jest inne, więc przeglądarka nie może zapamiętać tego pola tekstowego i nie zaproponuje niektórych wartości.

Jest to co najmniej bezpieczna alternatywa dla przeglądarki, ale polecam z odpowiedzią od RobertsonM (autocomplete="off").

+3

Efektem ubocznym tego jest to, że historia przeglądarki jest zapełniona wieloma różnymi (losowymi) polami formularza. Każde wyszukiwanie znanych wartości w przeglądarkach lokalnych baz danych zajmie trochę czasu. – dermatthias

+4

Niezły pomysł, ale nie zapobiega zapisywaniu numerów kart kredytowych w niezaszyfrowanej bazie danych autouzupełniania. –

+2

To jest straszna sugestia i musi być nieoznakowana jako odpowiedź. – c00000fd

12

CSS nie ma tej zdolności. Będziesz musiał użyć skryptów po stronie klienta.

+0

Każdy pomysł, jak wyłączyć to na krawędzi? Bez względu na to, co robimy, widzimy to. –

104

W obecnej wersji w CSS nie ma atrybutu "autouzupełnianie wyłączone". Jednak html ma łatwy kod to:

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

Jeśli szukasz całej witrynie efektora, łatwe byłoby po prostu mieć funkcję js do uruchomienia przez cały „input” ów i dodawać ten tag lub wyszukaj odpowiednią klasę/identyfikator css.

Atrybut autouzupełnianie działa dobrze w Chrome i Firefox (!), Ale patrz też Is there a W3C valid way to disable autocomplete in a HTML form?

+1

To już nie działa – Oneezy

41

można łatwo zaimplementować przez jQuery

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

Dynamiczne wyłączanie, wielkie dzięki! – Juto

+2

W większości przypadków $ ("formularz"). Attr ("autouzupełnianie", "wył"); jest znacznie wydajniejszy (patrz komentarz do odpowiedzi poniżej) – irakli

+0

@irakli W moim przypadku użycie 'formularza' jest TYLKO czymś, co zadziałało. Nie "input". Dzięki. – khaverim

11

Jeśli używasz form można wyłączyć wszystkie automatycznie je uzupełnia się,

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

, za każdą Mozillę: "Jeśli atrybut autouzupełniania nie jest określony w elemencie wejściowym, przeglądarka używa wartości atrybutu autocomplete właściciela formularza elementu . Właściciel formularza jest albo elementem formularza, który ten element jest potomkiem 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

. " biorąc pod uwagę, że bardziej wydajną alternatywą jQuery do powyższej będzie: $ ("forma"). attr ("autouzupełnianie", "wyłączone"); – irakli

-2
$('input').attr('autocomplete','off'); 
+0

Nie zapewnia to odpowiedzi na zadane pytanie. PO specjalnie poprosił o rozwiązanie CSS. Jest to dokładnie ta sama odpowiedź co już istniejąca. –

1

Dzięki @ahhmarr's rozwiązanie Byłem w stanie rozwiązać ten sam problem w moim środowisku Angular + ui-router, które podzielę się tutaj dla każdego, kto jest zainteresowany.

W moim index.html Dodałem następujący scenariusz:

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

Następnie na pokrycie zmian stanu, dodałem następujące w moim kontrolera głównego:

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

są limity czasu dla html do renderowania przed zastosowaniem jquery.

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

Powiązane problemy