Nonaktifkan pelengkapan otomatis melalui CSS

94

Apakah mungkin menggunakan CSS untuk menonaktifkan pelengkapan otomatis pada elemen formulir (khususnya bidang teks)?

Saya menggunakan pustaka tag yang tidak mengizinkan elemen pelengkapan otomatis dan saya ingin menonaktifkan pelengkapan otomatis tanpa menggunakan Javascript.

David
sumber

Jawaban:

52

Anda dapat menggunakan generated iddan nameeverytime, yang berbeda, sehingga browser tidak dapat mengingat bidang teks ini dan akan gagal untuk menyarankan beberapa nilai.

Setidaknya ini adalah alternatif yang aman untuk lintas browser, tetapi saya akan merekomendasikan untuk mengikuti jawaban dari RobertsonM ( autocomplete="off").

Christopher Klewes
sumber
4
Efek sampingnya adalah, riwayat browser menjadi berantakan dengan banyak bidang formulir (acak) yang berbeda. Setiap pencarian untuk nilai yang diketahui di data lokal browser akan memakan waktu.
dermatthias
4
Ide bagus, tetapi ini tidak mencegah nomor kartu kredit disimpan ke database pelengkapan otomatis yang tidak terenkripsi.
Hans-Peter Störr
Jika Anda tidak menggunakan nama / id kontrol statis maka skrip apa pun akan rusak dan pengumpulan data formulir apa pun juga akan rusak (kecuali setiap aspek aplikasi Anda mengetahui konvensi penamaan baru dan secara dinamis memperbarui skrip / pengumpulan data apa pun juga ).
Gary Richter
Jika Anda harus menghindari pelengkapan otomatis, "mengacak" nama bidang adalah satu-satunya cara yang harus dilakukan. Menggunakan petunjuk seperti autocomplete="off"ini akan diabaikan dalam versi Browser X (saat ini +1). (Misalnya, Google Chrome terbaru mengabaikan pelengkapan otomatis = nonaktif.)
Mikko Rantalainen
@kmoser: Meskipun Anda mengalahkan fitur pelengkapan otomatis browser dengan elemen acak, fitur idini akan tetap menyimpannya di cache (misalnya pada hard drive pengguna.) Yang merupakan hal yang mengerikan untuk dilakukan terhadap nomor kartu kredit seseorang atau informasi sensitif lainnya. Selain itu, ini tidak perlu mengacaukan drive disk pengguna Anda. Setiap kali mereka mengunjungi halaman Anda, file baru (seperti cookie) akan disimpan di komputer mereka. Hanya untuk itu, coba bersihkan cache Chrome Anda dan lihat berapa banyak ruang yang akan dikosongkan (jika Anda belum melakukannya untuk sementara waktu). Itulah mengapa saya menyebutnya ide yang buruk.
c00000fd
129

Seperti berdiri, tidak ada atribut 'pelengkapan otomatis mati' di CSS. Namun, html memiliki kode yang mudah untuk ini:

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

Jika Anda mencari efektor seluruh situs, yang mudah adalah dengan hanya memiliki fungsi js untuk menjalankan semua 'input' dan menambahkan tag ini, atau mencari kelas / id css yang sesuai.

Atribut pelengkapan otomatis berfungsi dengan baik di Chrome dan Firefox (!), Tetapi lihat juga Adakah cara W3C yang valid untuk menonaktifkan pelengkapan otomatis dalam bentuk HTML?

RobertsonM
sumber
4
developer.mozilla.org/en-US/docs/Web/Security/… menyarankan autocomplete="anyrandominvalidvalue"akan bekerja.
Andrew Stalker
49

Anda dapat dengan mudah menerapkan dengan jQuery

$('input').attr('autocomplete','off');
ahhmarr
sumber
4
Dalam kebanyakan kasus, $ ('form'). Attr ('autocomplete', 'off'); jauh lebih efisien (lihat komentar untuk jawaban di bawah)
irakli
@irakli Dalam kasus saya, menggunakan formadalah SATU-SATUNYA hal yang berhasil. Tidak input. Terima kasih.
khaverim
1
Hai, 2018 dan ini hanya satu-satunya cara agar saya dapat membuat ini berfungsi akhir-akhir ini. Juga, @irakli ini benar jika Anda perlu menggunakan seluruh formulir kami formulir sebagai pemilih.
Devon Kiss
15

Jika Anda menggunakan, formAnda dapat menonaktifkan semua pelengkapan otomatis dengan,

<form id="Form1" runat="server" autocomplete="off">
Ernest
sumber
memang, menurut Mozilla: "Jika atribut pelengkapan otomatis tidak ditentukan pada elemen masukan, maka browser menggunakan nilai atribut pelengkapan otomatis dari pemilik formulir <input>. Pemilik formulir adalah salah satu dari elemen formulir di mana elemen <input> ini turunan dari atau elemen formulir yang idnya ditentukan oleh atribut formulir dari elemen masukan. Untuk informasi selengkapnya, lihat atribut pelengkapan otomatis di <form>. " mempertimbangkan ini, alternatif jQuery yang jauh lebih efisien daripada yang ditunjukkan di atas adalah: $ ('form'). attr ('autocomplete', 'off');
irakli
13

CSS tidak memiliki kemampuan ini. Anda perlu menggunakan skrip sisi klien.

Sampson
sumber
1
Ada ide bagaimana menonaktifkan ini di edge? Tidak peduli apa yang kita lakukan, kita melihatnya.
Benjamin Gruenbaum
@BenjaminGruenbaum Menggunakan autocomplete="false"akan berfungsi di Edge. Secara teknis, nilai apa pun yang tidak valid dapat menggantikan "salah" di sini.
Andrew
4

Saya mencoba semua cara yang disarankan dari jawaban pertanyaan ini dan artikel lain di web tetapi tidak berhasil. Saya mencoba autocomplete = "new-random-value", autocomplete = "off" dalam elemen formulir, menggunakan skrip sisi klien seperti di bawah ini tetapi di luar $ (document) .ready () sebagai salah satu pengguna yang disebutkan:

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

Saya menemukan mungkin prioritas lain di browser menyebabkan perilaku aneh ini! Jadi saya mencari lebih banyak dan akhirnya, saya membaca lagi dengan hati-hati di bawah baris dari artikel yang bagus ini :

Karena alasan ini, banyak browser modern tidak mendukung autocomplete = "off" untuk bidang login:

Jika situs menyetel autocomplete = "off" untuk a, dan formulir tersebut menyertakan kolom masukan nama pengguna dan sandi, browser akan tetap menawarkan untuk mengingat login ini, dan jika pengguna setuju, browser akan mengisi otomatis kolom tersebut saat pengguna lain kali mengunjungi halaman. Jika situs menyetel autocomplete = "off" untuk kolom nama pengguna dan sandi, browser akan tetap menawarkan untuk mengingat login ini, dan jika pengguna setuju, browser akan mengisi otomatis kolom tersebut saat pengguna mengunjungi halaman tersebut di lain waktu. Ini adalah perilaku di Firefox (sejak versi 38), Google Chrome (sejak 34), dan Internet Explorer (sejak versi 11).

Jika Anda menentukan halaman manajemen pengguna tempat pengguna dapat menentukan sandi baru untuk orang lain, dan oleh karena itu Anda ingin mencegah pengisian kolom sandi secara otomatis, Anda dapat menggunakan autocomplete = "new-password" ; namun, dukungan untuk nilai ini belum diterapkan di Firefox.

Ini baru saja berhasil. Saya mencoba di chrome secara khusus dan saya harap ini terus bekerja dan membantu orang lain.

QMaster
sumber
1

Saya memecahkan masalah dengan menambahkan nama pelengkapan otomatis palsu untuk semua input.

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

Ada 3 cara untuk itu, saya sebutkan agar menjadi cara yang lebih baik ...

Cara 1-HTML:

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

Cara 2-Javascript:

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

Cara 3-jQuery:

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

Berkat solusi @ ahhmarr, saya dapat menyelesaikan masalah yang sama di lingkungan Angular + ui-router saya, yang akan saya bagikan di sini untuk siapa pun yang tertarik.

Di saya, index.htmlsaya telah menambahkan skrip berikut:

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

Kemudian untuk menutupi perubahan status, saya telah menambahkan yang berikut ini di pengontrol root saya:

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

Batas waktu adalah untuk dirender html sebelum menerapkan jquery.

Jika Anda menemukan solusi yang lebih baik, beri tahu saya.

TrampGuy
sumber
0

Anda tidak dapat menggunakan CSS untuk menonaktifkan pelengkapan otomatis, tetapi Anda dapat menggunakan HTML:

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

Secara teknis Anda dapat mengganti falsedengan nilai yang tidak valid dan itu akan berhasil. IOS ini satu-satunya solusi yang saya temukan yang juga berfungsi di Edge.

Andrew
sumber
0

Saya hanya menggunakan 'new-password'sebagai gantinya 'off'untuk pelengkapan otomatis.

dan saya juga telah mencoba menggunakan kode ini dan berfungsi (setidaknya di pihak saya), saya menggunakan WP dan GravityForm untuk informasi Anda

$('input').attr('autocomplete','new-password');
Kusukacoklat
sumber
-5
$('input').attr('autocomplete','off');
rohit
sumber
3
Ini tidak memberikan jawaban atas pertanyaan yang diajukan. OP secara khusus meminta solusi CSS, Juga, jawabannya persis sama dengan yang sudah ada.
Holger Hanya