CSS aracılığıyla otomatik tamamlamayı devre dışı bırakın


94

Bir form öğesinde (özellikle bir metin alanında) otomatik tamamlamayı devre dışı bırakmak için CSS kullanmak mümkün müdür?

Otomatik tamamlama öğesine izin vermeyen bir etiket kitaplığı kullanıyorum ve Javascript kullanmadan otomatik tamamlamayı devre dışı bırakmak istiyorum.

Yanıtlar:


52

Oluşturulan idve nameher seferinde farklı olan bir kullanabilirsiniz , böylece tarayıcı bu metin alanını hatırlayamaz ve bazı değerler öneremez.

Bu en azından tarayıcılar arası güvenli bir alternatiftir, ancak RobertsonM'den ( autocomplete="off") gelen cevaba gitmenizi tavsiye ederim .


4
Bunun bir yan etkisi, tarayıcı geçmişinin birçok farklı (rastgele) form alanıyla dağınık hale gelmesidir. Tarayıcıların yerel verilerinde bilinen değerlerin her aranması biraz zaman alacaktır.
dermatthias

4
Güzel fikir, ancak kredi kartı numaralarının şifrelenmemiş otomatik tamamlama veritabanına kaydedilmesini engellemez.
Hans-Peter Störr

Statik kontrol adları / kimlikleri kullanmazsanız, herhangi bir komut dosyası bozulur ve herhangi bir form veri toplama işlemi de bozulur (uygulamanızın her yönü yeni adlandırma kuralından haberdar değilse ve herhangi bir komut dosyasını / veri koleksiyonunu da dinamik olarak güncellemiyorsa) ).
Gary Richter

Otomatik tamamlamadan kaçınmalısınız, alan adlarını "rastgele hale getirmek" tek gerçek yoldur. autocomplete="off"Browser X sürümünde (mevcut + 1) gibi herhangi bir ipucu kullanmak yok sayılacaktır. (Örneğin, en son Google Chrome otomatik tamamlamayı göz ardı ediyor = kapalı.)
Mikko Rantalainen

@kmoser: Tarayıcının otomatik tamamlama özelliğini öğeyi rastgele hale getirerek yenseniz bile, idonu yine de önbelleğe (yani bir kullanıcının sabit diskine) kaydedecektir. Bu, birinin kredi kartı numarasına veya diğer hassas bilgilere yapılacak korkunç bir şeydir. Ek olarak, kullanıcınızın disk sürücülerini gereksiz yere karıştırır. Sayfanızı her ziyaret ettiklerinde bilgisayarlarına yeni (çerez benzeri) bir dosya kaydedilir. Sadece bunun için, Chrome önbelleğinizi temizlemeye çalışın ve ne kadar yer açacağını görün (bir süredir yapmadıysanız). Bu yüzden ona berbat bir fikir diyorum.
c00000fd

129

Hali hazırda olduğu gibi, CSS'de "otomatik tamamlama kapalı" özelliği yoktur. Ancak, html'nin bunun için kolay bir kodu vardır:

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

Site çapında bir efektör arıyorsanız, kolay olanı, tüm 'girişleri' çalıştırmak ve bu etiketi eklemek veya karşılık gelen css sınıfını / kimliğini aramak için bir js işlevine sahip olmak olacaktır.

Otomatik tamamlama özelliği Chrome ve Firefox'ta (!) İyi çalışıyor, ancak ayrıca bkz. HTML formunda otomatik tamamlamayı devre dışı bırakmak için W3C geçerli bir yol var mı?


4
developer.mozilla.org/en-US/docs/Web/Security/… önerileri autocomplete="anyrandominvalidvalue"işe yarayacak.
Andrew Stalker

49

jQuery ile kolayca uygulayabilirsiniz

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

4
Çoğu durumda, $ ['form']. Attr ('otomatik tamamlama', 'kapalı'); çok daha verimli (aşağıdaki cevaba yapılan yoruma bakınız)
irakli

@ irakli Benim durumumda, işe yarayan formTEK şey kullanmaktır . Değil input. Teşekkürler.
khaverim

1
Merhaba 2018 ve bugünlerde bunu çalıştırabilmemin tek yolu bu. Ayrıca @iraklı, formun tamamında bizi seçici olarak kullanmanız gerekiyorsa bu doğrudur.
Devon Öp

15

Bir kullanıyorsanız form, tüm otomatik tamamlamaları ile devre dışı bırakabilirsiniz,

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

aslında, Mozilla'ya göre: "Otomatik tamamlama özniteliği bir girdi öğesinde belirtilmezse, tarayıcı <input> öğesinin form sahibinin otomatik tamamlama öznitelik değerini kullanır. Form sahibi, bu <input> öğesinin olduğu form öğesidir alt öğesi veya kimliği giriş öğesinin form özniteliği tarafından belirtilen form öğesi. Daha fazla bilgi için, <form> içindeki otomatik tamamlama özniteliğine bakın. " bunun yukarıda gösterilene çok daha verimli bir jQuery alternatifi olduğu düşünülürse: $ ('form']. attr ('otomatik tamamlama', 'kapalı');
iraklı

13

CSS'nin bu yeteneği yoktur. İstemci tarafı komut dosyası kullanmanız gerekir.


1
Bunu kenarda nasıl devre dışı bırakacağınıza dair bir fikriniz var mı? Ne yaparsak yapalım görürüz.
Benjamin Gruenbaum

@BenjaminGruenbaum Kullanımı autocomplete="false"Edge'de çalışacaktır. Teknik olarak burada herhangi bir geçersiz değer "yanlış" yerine geçebilir.
Andrew

4

Bu soru cevaplarından ve web'deki diğer makalelerden önerilen tüm yolları denedim ama yine de çalışmıyorum. Form öğesinde autocomplete = "new-random-value", autocomplete = "off" komutunu aşağıdaki gibi istemci tarafı komut dosyasını kullanarak ancak belirtilen kullanıcılardan biri olarak $ (document) .ready () dışında kullanarak denedim:

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

Tarayıcıda belki başka bir öncelik buldum çünkü bu garip davranış! Bu yüzden daha fazla araştırdım ve sonunda, bu güzel makalenin satırlarının altını dikkatlice okudum :

Bu nedenle, birçok modern tarayıcı, oturum açma alanları için autocomplete = "off" özelliğini desteklemez:

Bir site, a için autocomplete = "off" olarak ayarlanmışsa ve form, kullanıcı adı ve şifre giriş alanlarını içeriyorsa, tarayıcı yine de bu girişi hatırlamayı teklif edecek ve kullanıcı kabul ederse, tarayıcı bu alanları kullanıcının bir sonraki sefer sayfayı ziyaret eder. Bir site, kullanıcı adı ve şifre alanları için autocomplete = "off" değerini ayarlarsa, tarayıcı yine de bu girişi hatırlamayı teklif edecek ve kullanıcı kabul ederse, tarayıcı bu alanları kullanıcının sayfayı bir sonraki ziyaretinde otomatik olarak dolduracaktır. Bu Firefox'taki (sürüm 38'den beri), Google Chrome'daki (34'ten beri) ve Internet Explorer'daki (sürüm 11'den beri) davranıştır.

Bir kullanıcının başka bir kişi için yeni bir şifre belirleyebileceği bir kullanıcı yönetimi sayfası tanımlıyorsanız ve bu nedenle şifre alanlarının otomatik olarak doldurulmasını önlemek istiyorsanız, autocomplete = "new-password" ; ancak, bu değer için destek Firefox'ta uygulanmamıştır.

Sadece çalıştı. Chrome'da özel olarak denedim ve umarım bu çalışmaya devam eder ve başkalarına yardımcı olur.


1

Tüm girişler için sahte bir otomatik tamamlama adı ekleyerek sorunu çözdüm.

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

1

Bunun 3 yolu var, daha iyi olması için onlardan bahsediyorum ...

1-HTML yolu:

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

2-Javascript yolu:

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

3-jQuery yolu:

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

0

@ Ahhmarr'ın çözümü sayesinde, ilgilenen herkes için burada paylaşacağım Angular + ui-router ortamımda aynı sorunu çözebildim .

Benim içinde index.htmlI ettik aşağıdaki senaryoyu ekledi:

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

Ardından durum değişikliklerini kapsamak için, kök denetleyicime aşağıdakileri ekledim:

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

Zaman aşımları, jquery uygulanmadan önce html'nin işlenmesi içindir.

Daha iyi bir çözüm bulursanız lütfen bana bildirin.


0

Otomatik tamamlamayı devre dışı bırakmak için CSS kullanamazsınız, ancak HTML kullanabilirsiniz:

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

Teknik falseolarak herhangi bir geçersiz değerle değiştirebilirsiniz ve işe yarayacaktır. Bu iOS, Edge'de de çalışan bulduğum tek çözüm.


0

Bunun 'new-password'yerine 'off'otomatik tamamlamada kullanıyorum.

ve ayrıca bu kodu kullanmayı denedim ve çalışıyor (en azından benim tarafımdan), bilginiz için WP ve GravityForm kullanıyorum

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

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

3
Bu, sorulan soruya bir cevap sağlamaz. OP özellikle bir CSS çözümü istedi, Ayrıca, zaten mevcut olanla tamamen aynı cevap.
Holger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.