Saya memiliki 2 formulir dasar - masuk dan daftar, keduanya di halaman yang sama. Sekarang, saya tidak punya masalah dengan pengisian otomatis formulir masuk,tetapi formulir pendaftaran otomatis terisi juga, dan saya tidak menyukainya.
Juga, gaya formulir mendapatkan latar belakang kuning yang tidak dapat saya timpa dan saya tidak ingin menggunakan CSS sebaris untuk melakukannya. Apa yang dapat saya lakukan untuk menghentikan warnanya menjadi kuningdan (mungkin) pengisian otomatis? Terima kasih sebelumnya!
Jawaban:
untuk pelengkapan otomatis, Anda dapat menggunakan:
<form autocomplete="off">
tentang masalah pewarnaan:
dari tangkapan layar Anda, saya dapat melihat bahwa webkit menghasilkan gaya berikut:
input:-webkit-autofill { background-color: #FAFFBD !important; }
1) karena # id-styles bahkan lebih penting daripada gaya .class, berikut ini mungkin berhasil:
#inputId:-webkit-autofill { background-color: white !important; }
2) jika itu tidak berhasil, Anda dapat mencoba mengatur gaya melalui javascript secara terprogram
$("input[type='text']").bind('focus', function() { $(this).css('background-color', 'white'); });
3) jika itu tidak berhasil,
Anda ditakdirkan :-)pertimbangkan ini: ini tidak akan menyembunyikan warna kuning, tetapi akan membuat teks dapat dibaca lagi.input:-webkit-autofill { color: #2a2a2a !important; }
4) solusi css / javascript:
css:
input:focus { background-position: 0 0; }
dan javascript berikut harus dijalankan saat dimuat:
function loadPage() { if (document.login)//if the form login exists, focus: { document.login.name.focus();//the username input document.login.pass.focus();//the password input document.login.login.focus();//the login button (submitbutton) } }
misalnya:
<body onload="loadPage();">
semoga berhasil :-)
5) Jika tidak ada yang berhasil, coba hapus elemen masukan, kloning, lalu tempatkan kembali elemen yang digandakan pada halaman (berfungsi di Safari 6.0.3):
<script> function loadPage(){ var e = document.getElementById('id_email'); var ep = e.parentNode; ep.removeChild(e); var e2 = e.cloneNode(); ep.appendChild(e2); var p = document.getElementById('id_password'); var pp = p.parentNode; pp.removeChild(p); var p2 = p.cloneNode(); pp.appendChild(p2); } document.body.onload = loadPage; </script>
6) Dari sini :
if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) { $(window).load(function(){ $('input:-webkit-autofill').each(function(){ var text = $(this).val(); var name = $(this).attr('name'); $(this).after(this.outerHTML).remove(); $('input[name=' + name + ']').val(text); }); }); }
sumber
code
var keepTheInputCloned = setInterval(function(){ var e = document.getElementById('id_email'); var ep = e.parentNode; ep.removeChild(e); var e2 = e.cloneNode(); ep.appendChild(e2); var p = document.getElementById('id_password'); var pp = p.parentNode; pp.removeChild(p); var p2 = p.cloneNode(); pp.appendChild(p2); },50); setTimeout(function(){clearInterval(keepTheInputCloned)},1000);
Trik dengan bayangan dalam yang "kuat":
input:-webkit-autofill { -webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */ -webkit-text-fill-color: #333; } input:-webkit-autofill:focus { -webkit-box-shadow: 0 0 0 50px white inset;/*your box-shadow*/ -webkit-text-fill-color: #333; }
sumber
Tambahkan aturan CSS ini, dan warna latar belakang kuning akan menghilang. :)
input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; }
sumber
<form autocomplete="off">
Hampir semua browser modern akan menghargai itu.
sumber
autocomplete
adalah bahwa itu tidak valid dalam HTML sebelum versi 5.Setelah 2 jam mencari, sepertinya Google Chrome masih mengganti warna kuning, tetapi saya menemukan perbaikannya. Ini akan berfungsi untuk hover, fokus, dll. Juga. Yang harus Anda lakukan adalah menambahkannya
!important
.input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus, input:-webkit-autofill:active { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
ini akan menghapus warna kuning sepenuhnya dari kolom masukan
sumber
Anda juga dapat mengubah atribut nama elemen formulir Anda menjadi sesuatu yang dihasilkan sehingga browser tidak akan melacaknya. NAMUN firefox 2.x + dan google chrome tampaknya tidak memiliki banyak masalah dengan itu jika url permintaan identik. Pada dasarnya coba tambahkan parameter permintaan garam dan nama bidang garam untuk formulir pendaftaran.
Namun saya pikir autocomplete = "off" masih merupakan solusi teratas :)
sumber
Anda dapat menonaktifkan pelengkapan otomatis pada HTML5 (melalui
autocomplete="off"
), tetapi Anda TIDAK DAPAT menimpa penyorotan browser. Anda dapat mencoba mengotak-atik::selection
CSS (sebagian besar browser memerlukan prefiks vendor agar berfungsi), tetapi itu mungkin tidak akan membantu Anda juga.Kecuali jika vendor browser secara khusus menerapkan cara khusus vendor untuk menimpanya, Anda tidak dapat melakukan apa pun tentang gaya yang sudah dimaksudkan untuk mengganti stylesheet situs bagi pengguna. Ini biasanya diterapkan setelah stylesheet Anda diterapkan dan mengabaikan
! important
penggantian juga.sumber
Terkadang pelengkapan otomatis di browser masih terlengkapi secara otomatis jika Anda hanya memiliki kode di
<form>
elemen.Saya mencoba memasukkannya ke dalam
<input>
elemen juga dan itu bekerja lebih baik.<form autocomplete="off"> AND <input autocomplete="off">
Namun dukungan untuk atribut ini berhenti, baca https://bugzilla.mozilla.org/show_bug.cgi?id=956906#c1
https://bugzilla.mozilla.org/show_bug.cgi?id=956906
Pekerjaan lain yang saya temukan adalah mengambil placeholder di dalam bidang masukan yang menyarankan bahwa itu adalah bidang email, nama pengguna, atau telepon (mis. "Email Anda", "Email", dll. ")
Ini membuatnya sehingga browser tidak tahu jenis bidangnya, sehingga tidak mencoba melengkapinya secara otomatis.
sumber
Jika di kolom masukan Anda mencoba untuk "menghapus kuning" ...
Jadi, mungkin akan terlihat seperti ini:
<input id="login" style="background-color: #ccc;" value="username" onblur="if(this.value=='') this.value='username';" onfocus="if(this.value=='username') this.value='';" />
sumber
Ini memperbaiki masalah di Safari dan Chrome
if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){ window.setInterval(function(){ $('input:-webkit-autofill').each(function(){ var clone = $(this).clone(true, true); $(this).after(clone).remove(); }); }, 20); }
sumber
Tangkapan layar yang Anda tautkan mengatakan bahwa WebKit menggunakan pemilih
input:-webkit-autofill
untuk elemen tersebut. Sudahkah Anda mencoba meletakkan ini di CSS Anda?input:-webkit-autofill { background-color: white !important; }
Jika itu tidak berhasil, mungkin tidak ada yang berhasil. Bidang-bidang tersebut disorot untuk memperingatkan pengguna bahwa mereka telah diisi otomatis dengan informasi pribadi (seperti alamat rumah pengguna) dan dapat dikatakan bahwa mengizinkan halaman untuk disembunyikan memungkinkan adanya risiko keamanan.
sumber
The
form
elemen memilikiautocomplete
atribut yang Anda dapat mengatur untukoff
. Pada CSS,!important
perintah setelah properti membuatnya tidak diganti:background-color: white !important;
Hanya IE6 yang tidak memahaminya.
Jika saya salah paham, ada juga
outline
properti yang menurut Anda berguna.sumber
!important
arahan, dalam hal ini akan diutamakan daripada yang lainnya. Anda harus memeriksa lembar gaya agen pengguna Anda (meskipun saya tidak tahu di mana menemukannya).Saya telah melihat fitur pelengkapan otomatis toolbar Google dinonaktifkan dengan javascript. Ini mungkin berfungsi dengan beberapa alat IsiOtomatis lainnya; Saya tidak tahu apakah itu akan membantu dengan browser bawaan pelengkapan otomatis.
<script type="text/javascript"><!-- if(window.attachEvent) window.attachEvent("onload",setListeners); function setListeners(){ inputList = document.getElementsByTagName("INPUT"); for(i=0;i<inputList.length;i++){ inputList[i].attachEvent("onpropertychange",restoreStyles); inputList[i].style.backgroundColor = ""; } selectList = document.getElementsByTagName("SELECT"); for(i=0;i<selectList.length;i++){ selectList[i].attachEvent("onpropertychange",restoreStyles); selectList[i].style.backgroundColor = ""; } } function restoreStyles(){ if(event.srcElement.style.backgroundColor != "") event.srcElement.style.backgroundColor = ""; }//--> </script>
sumber
Setelah mencoba banyak hal, saya menemukan solusi yang berfungsi yang mengaktifkan bidang pengisian otomatis dan menggantinya dengan duplikat. Agar tidak kehilangan acara terlampir, saya datang dengan solusi lain (agak panjang).
Pada setiap peristiwa "masukan", ia dengan cepat melampirkan peristiwa "perubahan" ke semua masukan yang terlibat. Ini menguji apakah mereka telah diisi otomatis. Jika ya, maka kirimkan peristiwa teks baru yang akan mengelabui browser untuk berpikir bahwa nilai telah diubah oleh pengguna, sehingga memungkinkan untuk menghapus latar belakang kuning.
var initialFocusedElement = null , $inputs = $('input[type="text"]'); var removeAutofillStyle = function() { if($(this).is(':-webkit-autofill')) { var val = this.value; // Remove change event, we won't need it until next "input" event. $(this).off('change'); // Dispatch a text event on the input field to trick the browser this.focus(); event = document.createEvent('TextEvent'); event.initTextEvent('textInput', true, true, window, '*'); this.dispatchEvent(event); // Now the value has an asterisk appended, so restore it to the original this.value = val; // Always turn focus back to the element that received // input that caused autofill initialFocusedElement.focus(); } }; var onChange = function() { // Testing if element has been autofilled doesn't // work directly on change event. var self = this; setTimeout(function() { removeAutofillStyle.call(self); }, 1); }; $inputs.on('input', function() { if(this === document.activeElement) { initialFocusedElement = this; // Autofilling will cause "change" event to be // fired, so look for it $inputs.on('change', onChange); } });
sumber
Solusi javascript sederhana untuk semua browser:
setTimeout(function() { $(".parent input").each(function(){ parent = $(this).parents(".parent"); $(this).clone().appendTo(parent); $(this).attr("id","").attr("name","").hide(); }); }, 300 );
Klon masukan, setel ulang atribut dan sembunyikan masukan asli. Waktu tunggu diperlukan untuk iPad
sumber
Karena browser mencari bidang jenis kata sandi, solusi lain adalah memasukkan bidang tersembunyi di awal formulir Anda:
<!-- unused field to stop browsers from overriding form style --> <input type='password' style = 'display:none' />
sumber
Saya telah membaca begitu banyak utas dan mencoba begitu banyak potongan kode. Setelah mengumpulkan semua itu, satu-satunya cara saya menemukan untuk mengosongkan bidang login dan kata sandi dengan bersih dan mengatur ulang latar belakangnya menjadi putih adalah sebagai berikut:
$(window).load(function() { setTimeout(function() { $('input:-webkit-autofill') .val('') .css('-webkit-box-shadow', '0 0 0px 1000px white inset') .attr('readonly', true) .removeAttr('readonly') ; }, 50); });
Jangan ragu untuk berkomentar, saya terbuka untuk semua peningkatan jika Anda menemukannya.
sumber
Pelengkapan otomatis tidak didukung oleh browser modern. Cara termudah untuk menyelesaikan pelengkapan otomatis yang saya temukan adalah sedikit melacak dengan HTML dan JS. Hal pertama yang harus dilakukan adalah mengubah jenis input dalam HTML dari 'password' menjadi 'text'.
<input class="input input-xxl input-watery" type="text" name="password"/>
Pelengkapan otomatis dimulai setelah jendela dimuat. Tidak apa-apa. Tetapi ketika jenis bidang Anda bukan 'kata sandi', browser tidak tahu bidang apa yang harus diisi. Jadi, tidak akan ada pelengkapan otomatis pada bidang formulir.
Setelah itu, ikat event focusin ke field password, misalnya. di Backbone:
'focusin input[name=password]': 'onInputPasswordFocusIn',
Di
onInputPasswordFocusIn
, cukup ubah jenis bidang Anda menjadi kata sandi, dengan pemeriksaan sederhana:if (e.currentTarget.value === '') { $(e.currentTarget).attr('type', 'password'); }
Itu dia!
UPD: hal ini tidak berfungsi dengan JavaSciprt yang dinonaktifkan
UPD tahun 2018. Juga ditemukan beberapa trik lucu. Setel atribut readonly ke bidang input, dan hapus di acara fokus. Pertama, cegah browser dari bidang pengisian otomatis, yang kedua memungkinkan untuk memasukkan data.
sumber
autocomplete=off
, karena berfungsi di FF, Chrome untuk sementara waktu, dan IE pada versi sebelumnya atau lebihSilakan coba dengan autocomplete = "none" di tag masukan Anda
Ini berhasil untuk saya
sumber
Saya juga harus mengubah warna teks menjadi sesuatu yang lebih gelap (lihat warna tema gelap StackOverflow).
Jadi berakhir dengan hibrida solusi @ Tamás Pap, @MCBL dan @ don:
input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus, input:-webkit-autofill:active { -webkit-box-shadow: 0 0 0px 1000px #2d2d2d inset !important; -webkit-text-stroke-color: #e7e8eb !important; -webkit-text-fill-color: #e7e8eb !important; }
sumber
Ini sepertinya berhasil untuk saya:
input { -webkit-background-clip: text !important; }
sumber
Mengapa tidak meletakkan ini di css Anda:
input --webkit-autocomplete { color: inherit; background: inherit; border: inherit; }
Itu seharusnya menangani masalah Anda. Meskipun hal itu menimbulkan masalah kegunaan karena sekarang pengguna tidak dapat melihat bahwa formulir telah diisi otomatis seperti biasanya.
[Sunting] Setelah memposting ini saya melihat bahwa jawaban yang sama telah diberikan dan Anda mengomentarinya bahwa itu tidak berhasil. Saya tidak begitu mengerti mengapa karena berhasil ketika saya mengujinya.
sumber
input:-webkit-autofill
daninput --webkit-autocomplete
sama sekali tidak adaMasalah NYATA di sini adalah Webkit (Safari, Chrome, ...) memiliki bug. Jika ada lebih dari satu [formulir] pada halaman, masing-masing dengan [input type = "text" name = "foo" ...] (yaitu dengan nilai yang sama untuk atribut 'name'), lalu saat pengguna kembali Untuk halaman autofill akan dilakukan pada kolom input [formulir] PERTAMA pada halaman tersebut, bukan pada [formulir] yang dikirimkan. Kedua kalinya, [formulir] BERIKUTNYA akan diisi otomatis, dan seterusnya. Hanya [formulir] dengan bidang teks masukan dengan nama SAMA yang akan terpengaruh.
Ini harus dilaporkan ke pengembang Webkit.
Opera mengisi otomatis [formulir] kanan.
Firefox dan IE tidak mengisi otomatis.
Jadi, saya katakan lagi: ini adalah bug di Webkit.
sumber