web-dev-qa-db-fra.com

Remplissage automatique de formulaire Google Chrome et son arrière-plan jaune

J'ai un problème de conception avec Google Chrome et sa fonction de remplissage automatique de la forme . Si Chrome se souvient de certains identifiants/mots de passe, il change la couleur de fond en jaune.

Voici quelques captures d'écran:

alt textalt text

Comment supprimer cet arrière-plan ou simplement désactiver ce remplissage automatique?

239
hsz

Changer "blanc" à n'importe quelle couleur que vous voulez.

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

Si vous voulez des champs de saisie transparents, vous pouvez utiliser une transition et un délai de transition. 

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

Solution ici :

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

Dans Firefox, vous pouvez désactiver tous les compléments automatiques d'un formulaire à l'aide de l'attribut autocomplete = "off/on". De même, les éléments individuels autocomplete peuvent être définis en utilisant le même attribut.

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

Vous pouvez tester cela dans Chrome comme il se doit.

26
Kinlan

Si vous souhaitez conserver le remplissage automatique, ainsi que les données, les gestionnaires attachés et les fonctionnalités attachées à vos éléments d'entrée, essayez ce 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);
}

Il interroge jusqu'à ce qu'il trouve des éléments de remplissage automatique, les clone, y compris les données et les événements, puis les insère dans le DOM au même emplacement et supprime l'original. Il cesse d'interroger une fois qu'il a trouvé un élément à cloner, car le remplissage automatique prend parfois une seconde après le chargement de la page. Il s'agit d'une variante d'un exemple de code précédent, mais plus robuste et qui conserve autant de fonctionnalités que possible.

(Utilisation confirmée dans Chrome, Firefox et IE 8.)

25
Jason

La CSS suivante supprime la couleur de fond jaune et la remplace par une couleur de fond de votre choix. Il ne désactive pas le remplissage automatique et ne nécessite aucun piratage jQuery ou 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;
}

Solution copiée à partir de: Ignorer le remplissage du formulaire par le navigateur et la surbrillance des entrées avec HTML/CSS

16
humbads

Travaillé pour moi, seul le changement css requis.

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

vous pouvez mettre n'importe quelle couleur à la place de #ffffff .

6
Milan

Un peu hacky mais fonctionne parfaitement pour moi

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

Cela corrige le problème à la fois sur Safari et 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);
}
3
Arjan

Une combinaison de réponses a fonctionné pour moi 

<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>
3
LeRoy

J'utilise ceci

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 */
2
Bhavesh Gangani

Voici la version MooTools de Jason. Le corrige également dans 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);                                               


    }
});
2
Confidant

Cela m'a aidé, une version uniquement CSS.

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

white peut être la couleur de votre choix.

2
Matt Goo

Dans votre tag, insérez simplement cette petite ligne de code. 

autocomplete="off"

Cependant, ne placez pas ceci dans le champ nom d'utilisateur/email/idname car si vous cherchez toujours à utiliser la saisie semi-automatique, cela le désactivera pour ce champ. Mais j'ai trouvé un moyen de contourner ce problème, il suffit de placer le code dans votre balise de saisie de mot de passe car vous ne complétez jamais de manière automatique les mots de passe. Ce correctif devrait supprimer la force de couleur, la capacité de complétion automatique du matin sur votre champ email/nom d'utilisateur, et vous permet d'éviter les hacks volumineux comme Jquery ou javascript.

1
Alex Sarnowski

Si vous voulez vous en débarrasser entièrement, j'ai ajusté le code dans les réponses précédentes pour qu'il fonctionne en survol, actif et aussi au 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
Alex

La seule façon qui fonctionne pour moi était: (jQuery required)

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

Essayez ce code:

 	$(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">

Voici une solution Mootools fonctionnant comme Alessandro - remplace chaque entrée affectée par une nouvelle.

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
And Finally

J'ai résolu ce problème pour un champ de mot de passe que j'ai comme ceci:

Définissez le type d'entrée sur texte au lieu de mot de passe

Supprimer la valeur du texte d'entrée avec jQuery

Convertir le type d'entrée en mot de passe avec jQuery

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

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

Une mise à jour de la solution Arjans. Lorsque vous essayez de modifier les valeurs, cela ne vous le permet pas. Cela fonctionne bien pour moi. Lorsque vous vous concentrez sur une entrée, elle passe au jaune. c'est assez proche.

$(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
Dustin Silk

fareed namrouti réponse est correcte. Mais le fond devient toujours jaune lorsque l'entrée est sélectionnée . L'ajout de !important corrige le problème. Si vous voulez aussi textarea et select avec le même comportement, ajoutez simplement textarea:-webkit-autofill, select:-webkit-autofill

Seule entrée

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

entrée, sélectionnez, textarea

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

Si vous voulez éviter le scintillement jaune jusqu'à ce que votre css soit appliqué, claquez une transition sur ce mauvais garçon comme ceci: 

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

Qu'en est-il de cette solution:

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

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

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

Il désactive la saisie et le remplissage automatiques (les fonds jaunes disparaissent), attend 100 millisecondes, puis rétablit la fonctionnalité de saisie automatique sans remplissage automatique.

Si vous avez des entrées à remplir automatiquement, donnez-leur auto-complete-on css class.

0
cryss

Aucune des solutions ne fonctionnait pour moi, les entrées de nom d'utilisateur et de mot de passe étaient toujours en cours de remplissage et avaient un arrière-plan jaune.

Je me suis donc demandé: "Comment Chrome détermine-t-il ce qui doit être rempli automatiquement sur une page donnée?"

"Est-ce qu'il recherche les identifiants d'entrée, les noms d'entrée? Identifiants de formulaire? Action de formulaire?"

Lors de mes expériences avec les entrées de nom d'utilisateur et de mot de passe, il n'y avait que deux façons pour que Chrome ne puisse pas trouver les champs à remplir automatiquement:

1) Placez le mot de passe avant le texte . 2) Donnez-leur le même nom et le même identifiant ... ou pas de nom et id.

Une fois la page chargée, javascript vous permet de modifier l’ordre des entrées de la page ou de leur attribuer dynamiquement leur nom et leur identifiant ...

Et Chrome ne sait pas ce qui se passe ... La saisie semi-automatique reste désactivée.

Fou hack, je sais. Mais ça marche pour moi.

Chrome 34.0.1847.116, OSX 10.7.5

0
i_a

Ajouter autocomplete="off" ne va pas le couper.

Changez l'attribut du type d'entrée en type="search".
Google n'applique pas le remplissage automatique aux entrées avec un type de recherche.

J'espère que cela vous fait gagner du temps.

0
Matas Vaitkevicius