Google Chrome forma il riempimento automatico e il suo sfondo giallo


245

Ho un problema di progettazione con Google Chrome e la sua funzione di riempimento automatico del modulo. Se Chrome ricorda alcuni login / password, cambia un colore di sfondo in uno giallo.

Ecco alcuni screenshot:

testo alternativo testo alternativo

Come rimuovere quello sfondo o semplicemente disabilitare questo riempimento automatico?


4
Mi piacerebbe anche vedere se c'è una risposta a questo.
Kyle,

12
Per lo stile, questo colore può seriamente con elementi di design, come il contorno dei tag di input in Chrome, vorrei più cambiare il colore che disattivarlo.
Kyle,

3
Google sembra riconoscere questo problema in una certa misura. Vedi code.google.com/p/chromium/issues/detail?id=46543
MitMaro

1
Per disabilitare il completamento automatico puoi aggiungere il completamento automatico = "off" al tuo elemento di input, ad es. <Input type = "text" id = "input" autocomplete = "off">
joe_young

1
Solo un'ulteriore informazione: sono stato morso da questo quando ho un campo password. I miei campi sono stati evidenziati automaticamente (giallo) e riempiti con uno strano valore. E ho trovato la soluzione qui: zigpress.com/2014/11/22/stop-chrome-messing-forms ... La soluzione è nella sezione che dice "Disabilita il riempimento automatico di Google Chrome" ... aggiungi campi nascosti.
Cokorda Raka,

Risposte:


282

Cambia "bianco" con qualsiasi colore tu voglia.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
}

4
grande idea. Attaccherei con 50 o 100 ogni volta che è sufficiente (scatole di input di dimensioni normali) per evitare potenziali colpi di prestazioni su dispositivi più deboli. (E non c'è bisogno di px dopo 0)
Frank Nocke

4
Adoro questo trucco! Ottimo pensiero ... Tutti stanno rimuovendo il riempimento automatico. Volevo continuare il riempimento automatico solo per cavalcare il brutto giallo.
Travis,

1
Non funziona se ci sono immagini di sfondo dietro il campo di input, basta riempire l'intera area di bianco. Ho provato tutte le soluzioni in questa pagina, comprese quelle basate su jquery e non hanno funzionato per me, alla fine ho dovuto aggiungere autocomplete = "off" al campo.
Myke Black

19
Per dare uno stile anche al colore del testo usa -webkit-text-fill-color- vedi questa domanda
Erwin Wessels l'

2
c'è un errore, forse la sintassi forse non è cambiata ma ora funziona:box-shadow: inset 0 0 0 1000px white !important;
Muhammad Umer

49

Se volete campi di input trasparenti, potete utilizzare il ritardo di transizione e transizione.

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-transition-delay: 9999s;
    -webkit-transition: color 9999s ease-out, background-color 9999s ease-out;
}

La migliore soluzione per me poiché i valori di colore RGBA non funzionavano -webkit-box-shadow. Elimina anche la necessità di fornire valori di colore per questa dichiarazione: i valori predefiniti verranno comunque applicati.
Sébastien,

ancora meglio è usare il ritardo di transizione invece della sua durata, per non avere affatto la miscelazione dei colori
antoine129

bene, ma per qualche motivo ho dovuto spostare questa regola alla fine del file, altrimenti non ha funzionato
Igor Mizak,

Questo è quello che ho cercato! Grazie!
Akhmedzianov Danilian,

43

Soluzione qui :

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);
        });
    });
}

Questo ha funzionato, mentre la risposta migliore no. Comunque penso che non proverò a cambiare il comportamento da a). questo è javascript quindi c'è un secondo tra funziona e non funziona (fino a quando non viene caricato js) eb). potrebbe confondere l'utente di Chrome che è abituato al comportamento predefinito.
TK123,

3
Il mio chrome riapplica il giallo al nuovo input :(
Dustin Silk

Per favore, no. Questo non funzionerà con alcun framework JS, solo per siti Web statici.
Akhmedzianov Danilian,

26

In Firefox è possibile disabilitare tutti i completamenti automatici in un modulo utilizzando l'attributo completamento automatico = "off / on". Allo stesso modo è possibile impostare il completamento automatico dei singoli elementi utilizzando lo stesso attributo.

<form autocomplete="off" method=".." action="..">  
<input type="text" name="textboxname" autocomplete="off">

Puoi testarlo in Chrome come dovrebbe funzionare.


7
La svolta autocomplete="off"non è accessibile in questi giorni.
João

4
Sfortunatamente, questa soluzione non funziona più in Chrome.
henrywright,

1
Questo è altamente sconsigliato in quanto non stai davvero risolvendo il problema reale qui. invece, ne stai creando uno nuovo frustrando gli utenti perché devono digitare manualmente i loro (presumibilmente) dettagli di accesso (se ricordano persino cosa fossero)
xorinzor

25

Se desideri conservare il riempimento automatico, nonché tutti i dati, i gestori collegati e le funzionalità associate ai tuoi elementi di input, prova questo script:

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
{
    var _interval = window.setInterval(function ()
    {
        var autofills = $('input:-webkit-autofill');
        if (autofills.length > 0)
        {
            window.clearInterval(_interval); // stop polling
            autofills.each(function()
            {
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }
    }, 20);
}

Esegue il polling fino a quando non trova elementi di riempimento automatico, li clona inclusi dati ed eventi, quindi li inserisce nel DOM nella stessa posizione e rimuove l'originale. Smette di eseguire il polling quando trova qualcuno da clonare poiché il riempimento automatico a volte impiega un secondo dopo il caricamento della pagina. Questa è una variante di un precedente esempio di codice, ma più robusta e mantiene intatta la maggior funzionalità possibile.

(Confermato che funziona in Chrome, Firefox e IE 8.)


6
Questa è stata l'unica soluzione che ho trovato funzionante, SENZA disabilitare il completamento automatico.
Xeroxoid,

forse l'impostazione degli intervalli non è necessaria poiché Chrome si riempie automaticamente su window.load?
Timo Huovinen,

2
Funziona senza rimuovere il completamento automatico, soluzione molto migliore di quelle con milioni di voti positivi.
Alleato

Le altre soluzioni non hanno funzionato per me, anche la più votata, ma questa ha funzionato. Il problema, che è l'opposto di quanto detto sopra da @Timo, è che Chrome non si riempie automaticamente su window.load. Anche se ha funzionato, un problema è che se non ci sono elementi -webkit-autofill, il ciclo funziona continuamente. Non hai nemmeno bisogno di un intervallo per farlo funzionare. Basta impostare un timeout con forse un ritardo di 50 millisecondi e funzionerà bene.
Gavin,

16

Il CSS seguente rimuove il colore di sfondo giallo e lo sostituisce con un colore di sfondo di tua scelta. Non disabilita il riempimento automatico e non richiede hack jQuery o Javascript.

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: /*your box-shadow*/,0 0 0 50px white inset;
    -webkit-text-fill-color: #333;
}

Soluzione copiata da: sovrascrive la compilazione del modulo del browser e l'evidenziazione dell'input con HTML / CSS


Non gioca bene se al campo sono applicate più ombre.
Rafforzare la mia competenza il

6

Ha funzionato per me, è richiesto solo il cambio CSS.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px #ffffff inset!important;
}

puoi mettere qualsiasi colore al posto di #ffffff .


3

Un po 'confuso ma funziona perfettamente per me

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}

3

Una combinazione di risposte ha funzionato per me

<style>
    input:-webkit-autofill,
    input:-webkit-autofill:hover,
    input:-webkit-autofill:focus,
    input:-webkit-autofill:active {
        -webkit-box-shadow: 0 0 0px 1000px #373e4a inset !important;
           -webkit-text-fill-color: white !important;
   }
</style>

Questo è l'unico esempio che ha funzionato per me sia con il testo che con lo sfondo della versione 53.0.2785.116 di Chrome
pleshy,

2

Ecco la versione MooTools di Jason's. Risolve anche in Safari.

window.addEvent('domready',function() { 
    $('username').focus();

    if ((navigator.userAgent.toLowerCase().indexOf(\"chrome\") >= 0)||(navigator.userAgent.toLowerCase().indexOf(\"safari\") >= 0))
    {

        var _interval = window.setInterval(function ()
        {
            var autofills = $$('input:-webkit-autofill');
            if (autofills.length > 0)
            {

                window.clearInterval(_interval); // stop polling
                autofills.each(function(el)
                {
                    var clone = el.clone(true,true).inject(el,'after');;
                    el.dispose();
                });
            }
        }, 20);                                               


    }
});

1
Non usare questo script. Se non ci sono elementi riempiti automaticamente, il ciclo continuerà a funzionare a 20 millisecondi. Un intervallo non è necessario. Imposta un timeout dopo window.load a circa 50 millisecondi e sarà un sacco di tempo per rimuovere lo stile.
Gavin,

2

Questo risolve il problema su Safari e 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);
}

È ciò che funziona per me. Ma il BUG è ancora lì, e come si può vedere, nessuna data da fissare. code.google.com/p/chromium/issues/detail?id=46543#c22
Eduardo M

Non cancelli mai il tuo intervallo. Questo è un codice sciatto, non usarlo.
Gavin,

1
In realtà questo non funziona. Non riesco a digitare nulla negli input poiché vengono costantemente clonati. quasi lì ...
Dustin Silk il

prova questo var id = window.setInterval (function () {$ ('input: -webkit-autofill'). each (function () {var clone = $ (this) .clone (true, true); $ (this) .after (clone) .remove ();});}, 20); $ ( 'Ingresso: -webkit-riempimento automatico'). Messa a fuoco (function () {window.clearInterval (id);});
Dustin Silk,

2

Questo mi ha aiutato, una versione solo CSS.

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; }

dove il bianco può essere di qualsiasi colore tu voglia.


2

Io lo uso

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
/* You can use color:#color to change the color */

1

Nel tuo tag, inserisci semplicemente questa piccola riga di codice.

autocomplete="off"

Tuttavia, non inserirlo nel campo username / email / idname perché se stai ancora cercando di utilizzare il completamento automatico, lo disabiliterà per questo campo. Ma ho trovato un modo per aggirare questo, semplicemente inserire il codice nel tag di immissione della password perché non si completano mai automaticamente le password. Questa correzione dovrebbe rimuovere la forza del colore, l'abilità di completamento automatico del matinain sul campo e-mail / nome utente e ti consente di evitare hack ingombranti come Jquery o javascript.


1

Se vuoi sbarazzartene completamente, ho modificato il codice nelle risposte precedenti in modo che funzioni su hover, active e focus:

input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:active, input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 1000px white inset;
}

1
aggiungere un !importantè necessario ma grazie, mi ha aiutato molto.
Polochon,

0

Ecco una soluzione Mootools che fa lo stesso di Alessandro: sostituisce ogni input interessato con uno nuovo.

if (Browser.chrome) {
    $$('input:-webkit-autofill').each(function(item) {
        var text = item.value;
        var name = item.get('name');
        var newEl = new Element('input');
        newEl.set('name', name);
        newEl.value = text;
        newEl.replaces(item);
    });
}

0

Che dire di quella soluzione:

if ($.browser.webkit) {
    $(function() {
        var inputs = $('input:not(.auto-complete-on)');

        inputs.attr('autocomplete', 'off');

        setTimeout(function() {
            inputs.attr('autocomplete', 'on');
        }, 100);
    });
}

Disattiva il completamento automatico e il riempimento automatico (quindi scompaiono gli sfondi gialli), attende 100 millisecondi e quindi ripristina la funzionalità di completamento automatico senza riempimento automatico.

Se hai input che devono essere compilati automaticamente, dai loro la auto-complete-onclasse css.


0

Nessuna delle soluzioni ha funzionato per me, gli input di nome utente e password erano ancora popolati e con lo sfondo giallo.

Quindi mi sono chiesto: "In che modo Chrome determina cosa deve essere compilato automaticamente in una determinata pagina?"

"Cerca ID di input, nomi di input? ID di modulo? Azione modulo?"

Attraverso la mia sperimentazione con il nome utente e gli input della password, ho trovato solo due modi per impedire a Chrome di trovare i campi da compilare automaticamente:

1) Inserire l'inserimento della password prima dell'inserimento del testo. 2) Dai loro lo stesso nome e id ... o nessun nome e id.

Dopo il caricamento della pagina, con javascript puoi cambiare l'ordine degli input nella pagina o dare loro dinamicamente il loro nome e id ...

E Chrome non sa cosa l'ha colpito ... il completamento automatico rimane spento.

Pazzo hack, lo so. Ma funziona per me.

Chrome 34.0.1847.116, OSX 10.7.5


0

L'unico modo per me era: (richiesto jQuery)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

0

Ho risolto questo problema per un campo password che ho così:

Impostare il tipo di input su testo anziché su password

Rimuovere il valore del testo di input con jQuery

Converti il ​​tipo di input in password con jQuery

<input type="text" class="remove-autofill">

$('.js-remove-autofill').val('');    
$('.js-remove-autofill').attr('type', 'password');

Non funziona in Chrome. Non appena il campo diventa type = password, Chrome lo inserisce
mowgli il

0

Un aggiornamento alla soluzione Arjans. Quando provi a cambiare i valori non te lo permetterebbe. Questo funziona bene per me. Quando ti concentri su un input, diventerà giallo. è abbastanza vicino.

$(document).ready(function (){
    if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
        var id = window.setInterval(function(){
            $('input:-webkit-autofill').each(function(){
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }, 20);

        $('input:-webkit-autofill').focus(function(){window.clearInterval(id);});
    }
});

$('input:-webkit-autofill').focus(function(){window.clearInterval(id);});

0

Prova questo codice:

 	$(function(){
   		setTimeout(function(){
   			$('[name=user_password]').attr('type', 'password');
   		}, 1000);
   	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<input name="user_password" type="password">


0

la risposta è stata corretta. Ma lo sfondo diventa ancora giallo quando viene selezionato l'input . Aggiunta !importantrisolve il problema. Se vuoi anche textareae selectcon lo stesso comportamento, aggiungitextarea:-webkit-autofill, select:-webkit-autofill

Solo input

input:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

input, seleziona, textarea

input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

0

L'aggiunta autocomplete="off"non lo taglierà.

Cambia l'attributo del tipo di input in type="search".
Google non applica il riempimento automatico agli input con un tipo di ricerca.

Spero che questo ti faccia risparmiare un po 'di tempo.


0

Se vuoi evitare lo sfarfallio giallo fino a quando il tuo CSS non viene applicato schiaffeggia una transizione su quel cattivo ragazzo in questo modo:

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
    transition: background-color 10s ease-in-out 0s;
}

-1

L'ultima soluzione:

$(document).ready(function(){
    var contadorInterval = 0;
    if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
    {
        var _interval = window.setInterval(function ()
        {
            var autofills = $('input:-webkit-autofill');
            if (autofills.length > 0)
            {
                window.clearInterval(_interval); // stop polling
                autofills.each(function()
                {
                    var clone = $(this).clone(true, true);
                    $(this).after(clone).remove();
                    setTimeout(function(){
//                        $("#User").val('');
                        $("#Password").val('');
                    },10);
                });
            }
            contadorInterval++;
            if(contadorInterval > 50) window.clearInterval(_interval); // stop polling
        }, 20);
    }else{
        setTimeout(function(){
//            $("#User").val('');
            $("#Password").val('');
        },100);
    }
});


-5

Mi sono appena trovato con la stessa domanda. Questo funziona per me:

form :focus {
  outline: none;
}

3
questo è il contorno sulla casella quando fai clic su di esso, non il colore di sfondo dell'input compilato automaticamente
Claire
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.