Comment savoir si un navigateur a rempli automatiquement une zone de texte? Surtout avec les champs de nom d'utilisateur et de mot de passe qui se remplissent automatiquement autour du chargement de la page.
Ma première question est quand cela se produit-il dans la séquence de chargement de la page? Est-ce avant ou après le document.
Deuxièmement, comment puis-je utiliser la logique pour savoir si cela s'est produit? Ce n'est pas que je veuille empêcher cela de se produire, il suffit de me connecter à l'événement. De préférence quelque chose comme ceci:
if (autoFilled == true) {
} else {
}
Si possible, j'aimerais voir un jsfiddle montrant votre réponse.
Doublons possibles
Événement DOM pour la saisie automatique du mot de passe du navigateur?
Événements déclenchés par le remplissage automatique du navigateur et Javascript
- Ces deux questions n'expliquent pas vraiment quels événements sont déclenchés, elles revérifient continuellement la zone de texte (pas bon pour les performances!).
la source
Réponses:
Le problème est que le remplissage automatique est géré différemment par différents navigateurs. Certains envoient l'événement de changement, d'autres non. Il est donc presque impossible de s'accrocher à un événement qui est déclenché lorsque le navigateur remplit automatiquement un champ de saisie.
Modifier le déclencheur d'événement pour différents navigateurs:
Pour les champs nom d'utilisateur / mot de passe:
Pour les autres champs de formulaire:
Les meilleures options sont de désactiver la saisie semi-automatique pour un formulaire en utilisant
autocomplete="off"
dans votre formulaire ou d'interroger à intervalles réguliers pour voir s'il est rempli.Pour votre question de savoir si elle est remplie sur ou avant le document, il varie à nouveau d'un navigateur à l'autre et même d'une version à l'autre. Pour les champs de nom d'utilisateur / mot de passe uniquement lorsque vous sélectionnez un champ de mot de passe de nom d'utilisateur est rempli. Donc, dans l'ensemble, vous auriez un code très compliqué si vous essayez de vous attacher à n'importe quel événement.
Vous pouvez avoir une bonne lecture ICI
la source
input
événement. C'est ce que Chrome déclenche lors de la saisie semi-automatique (et probablement aussi du remplissage automatique, si Chrome a cela; je désactive toujours cette fonctionnalité).Solution pour les navigateurs WebKit
À partir de la documentation MDN pour la pseudo-classe CSS : -webkit-autofill :
Nous pouvons définir une règle css de transition vide sur l'
<input>
élément souhaité une fois qu'il est:-webkit-autofill
édité. JS pourra alors s'accrocher auanimationstart
événement.Crédits à l' équipe Klarna UI . Voir leur belle mise en œuvre ici:
la source
Cela fonctionne pour moi dans les derniers Firefox, Chrome et Edge:
la source
'input'
! C'était la solution la plus simple pour moi, mais j'ai testé uniquement la saisie semi-automatique, pas la saisie automatique.Pour la saisie semi-automatique de Google Chrome, cela a fonctionné pour moi:
la source
Juste au cas où quelqu'un chercherait une solution (comme je l'étais aujourd'hui), pour écouter un changement de remplissage automatique du navigateur, voici une méthode jquery personnalisée que j'ai créée, juste pour simplifier le processus lors de l'ajout d'un écouteur de changement à une entrée:
Vous pouvez l'appeler comme ceci:
la source
Je lisais beaucoup sur ce problème et je voulais fournir une solution de contournement très rapide qui m'a aidé.
où
inputBackgroundNormalState
pour mon modèle est «rgb (255, 255, 255)».Donc, fondamentalement, lorsque les navigateurs appliquent la saisie semi-automatique, ils ont tendance à indiquer que l'entrée est remplie automatiquement en appliquant une couleur jaune différente (ennuyeuse) à l'entrée.
Edit: cela fonctionne pour tous les navigateurs
la source
Malheureusement, le seul moyen fiable que j'ai trouvé pour vérifier ce navigateur croisé est d'interroger l'entrée. Pour le rendre réactif, écoutez également les événements. Chrome a commencé à masquer les valeurs de remplissage automatique de javascript qui nécessite un piratage.
Ajoutez un correctif pour les valeurs de mot de passe de saisie automatique masquées dans Chrome.
la source
Il existe un nouveau composant polyfill pour résoudre ce problème sur github. Jetez un œil à autofill-event . Il suffit de l'installer et voilà, le remplissage automatique fonctionne comme prévu.
la source
Ma solution:
Écoutez les
change
événements comme vous le feriez normalement, et lors du chargement du contenu DOM, procédez comme suit:Cela déclenchera les événements de modification pour tous les champs qui ne sont pas vides avant que l'utilisateur ait eu la possibilité de les modifier.
la source
J'ai également rencontré le même problème où l'étiquette ne détectait pas le remplissage automatique et l'animation pour déplacer l'étiquette sur le texte de remplissage se chevauchait et cette solution a fonctionné pour moi.
la source
Je cherchais une chose similaire. Chrome uniquement ... Dans mon cas, le div wrapper avait besoin de savoir si le champ de saisie était rempli automatiquement. Je pourrais donc lui donner un css supplémentaire, tout comme Chrome le fait dans le champ de saisie lorsqu'il le remplit automatiquement. En regardant toutes les réponses ci-dessus, ma solution combinée était la suivante:
Le html pour que cela fonctionne serait
la source
Je sais que c'est un vieux fil, mais j'imagine que beaucoup viennent pour trouver une solution à cela ici.
Pour ce faire, vous pouvez vérifier si la ou les entrées ont des valeurs avec:
Je l'utilise moi-même pour vérifier les valeurs dans mon formulaire de connexion lorsqu'il est chargé pour activer le bouton d'envoi. Le code est fait pour jQuery mais est facile à changer si nécessaire.
la source
($("#inputID:-webkit-autofill").val().length > 0) {
C'est une solution pour les navigateurs avec un moteur de rendu webkit . Lorsque le formulaire est rempli automatiquement, les entrées obtiendront la pseudo classe : -webkit-autofill- (par exemple, entrée: -webkit-autofill {...}). C'est donc l'identifiant que vous devez vérifier via JavaScript.
Solution avec un formulaire de test:
Et javascript:
Problème lorsque la page se charge est d'obtenir la valeur du mot de passe, même la longueur. C'est parce que la sécurité du navigateur. Aussi le délai d'expiration , c'est parce que le navigateur remplira le formulaire après un certain temps.
Ce code ajoutera la classe auto_filled aux entrées remplies. De plus, j'ai essayé de vérifier la valeur ou la longueur du mot de passe du type d'entrée, mais cela a fonctionné juste après qu'un événement sur la page se soit produit. J'ai donc essayé de déclencher un événement, mais sans succès. Pour l'instant c'est ma solution. Prendre plaisir!
la source
J'ai une solution parfaite pour cette question, essayez cet extrait de code.
La démo est là
la source
Sur Chrome, vous pouvez détecter les champs de remplissage automatique en définissant une règle css spéciale pour les éléments remplis automatiquement, puis en vérifiant avec javascript si cette règle est appliquée à l'élément.
Exemple:
CSS
JavaScript
la source
Voici la solution CSS tirée de l'équipe de Klarna UI. Voir leur belle implémentation ici ressource
Fonctionne bien pour moi.
la source
J'ai utilisé cette solution pour le même problème.
Le code HTML devrait changer comme suit:
et le code jQuery doit être dans
document.ready
:la source
J'ai utilisé l'événement flou sur le nom d'utilisateur pour vérifier si le champ pwd avait été rempli automatiquement.
Cela fonctionne pour IE, et devrait fonctionner pour tous les autres navigateurs (j'ai seulement vérifié IE)
la source
blur
événement. Je demande la même fonction pour lechange
etblur
événement et il a très bien fonctionné. Une solution simple sans bibliothèques supplémentaires.J'ai eu le même problème et j'ai écrit cette solution.
Il commence à interroger chaque champ de saisie lorsque la page se charge (j'ai défini 10 secondes mais vous pouvez régler cette valeur).
Après 10 secondes, il arrête d'interroger sur chaque champ d'entrée et il commence à interroger uniquement sur l'entrée focalisée (le cas échéant). Il s'arrête lorsque vous floutez l'entrée et recommence si vous en faites la mise au point.
De cette façon, vous n'interrogez que lorsque cela est vraiment nécessaire et uniquement sur une entrée valide.
Cela ne fonctionne pas très bien lorsque plusieurs valeurs sont insérées automatiquement, mais il pourrait être modifié à la recherche de chaque entrée du formulaire actuel.
Quelque chose comme:
la source
Si vous souhaitez uniquement détecter si le remplissage automatique a été utilisé ou non, plutôt que de détecter exactement quand et dans quel champ le remplissage automatique a été utilisé, vous pouvez simplement ajouter un élément caché qui sera rempli automatiquement, puis vérifier si cela contient n'importe quelle valeur. Je comprends que ce n'est peut-être pas ce qui intéresse beaucoup de gens. Définissez le champ de saisie avec un tabIndex négatif et avec des coordonnées absolues bien en dehors de l'écran. Il est important que l'entrée fasse partie du même formulaire que le reste de l'entrée. Vous devez utiliser un nom qui sera récupéré par Auto-fill (ex. "Secondname").
Ajoutez cette entrée au formulaire et vérifiez sa valeur lors de l'envoi du formulaire.
la source
Il ne fait semble y avoir une solution à ce qui ne repose pas sur les sondages (au moins pour Chrome). C'est presque aussi hackish, mais je pense que c'est légèrement meilleur qu'un sondage mondial.
Considérez le scénario suivant:
L'utilisateur commence à remplir le champ 1
L'utilisateur sélectionne une suggestion de saisie semi-automatique qui remplit automatiquement le champ2 et le champ3
Solution: enregistrez un onblur sur tous les champs qui vérifie la présence de champs remplis automatiquement via l'extrait de code jQuery $ (': - webkit-autofill')
Ce ne sera pas immédiat car il sera retardé jusqu'à ce que l'utilisateur brouille le champ1 mais il ne repose pas sur un sondage global, donc l'OMI, c'est une meilleure solution.
Cela dit, étant donné que le fait d'appuyer sur la touche Entrée peut soumettre un formulaire, vous pouvez également avoir besoin d'un gestionnaire correspondant pour onkeypress.
Vous pouvez également utiliser le sondage global pour vérifier $ (': - webkit-autofill')
la source
D'après mon expérience personnelle, le code ci-dessous fonctionne bien avec Firefox IE et Safari, mais ne fonctionne pas très bien pour choisir la saisie semi-automatique dans Chrome.
Le code ci-dessous fonctionne mieux, car il se déclenchera à chaque fois que l'utilisateur clique sur le champ de saisie et à partir de là, vous pouvez vérifier que le champ de saisie est vide ou non.
la source
J'ai réussi sur chrome avec:
la source
Ma solution est:
la source
Après recherche, le problème est que les navigateurs Webkit ne déclenchent pas d'événement de modification lors de la saisie semi-automatique. Ma solution consistait à obtenir la classe de remplissage automatique ajoutée par Webkit et à déclencher un événement de modification par moi-même.
Voici un lien pour le problème du chrome. https://bugs.chromium.org/p/chromium/issues/detail?id=636425
la source
Pour détecter les e-mails par exemple, j'ai essayé "on change" et un observateur de mutation, ni l'un ni l'autre n'a fonctionné. setInterval fonctionne bien avec le remplissage automatique de LinkedIn (ne révélant pas tout mon code, mais vous avez l'idée) et il joue bien avec le backend si vous ajoutez ici des conditions supplémentaires pour ralentir l'AJAX. Et s'il n'y a pas de changement dans le champ du formulaire, comme s'ils ne tapent pas pour modifier leur e-mail, le dernierEmail empêche les pings AJAX inutiles.
la source
J'ai eu du mal à détecter le remplissage automatique dans Firefox. C'est la seule solution qui a fonctionné pour moi:
Démo
HTML:
CSS:
JavaScript:
Pour Chrome, j'utilise:
if ($(this).css('animation-name') == 'onAutoFillStart')
Pour Firefox:
if ($(this).val() != '')
la source
essayer en CSS
input:-webkit-autofill { border-color: #9B9FC4 !important; }
la source