¿Cómo saber si un navegador ha llenado automáticamente un cuadro de texto? Especialmente con cuadros de nombre de usuario y contraseña que se rellenan automáticamente alrededor de la carga de la página.
Mi primera pregunta es ¿cuándo ocurre esto en la secuencia de carga de la página? ¿Es antes o después de document.ready?
En segundo lugar, ¿cómo puedo usar la lógica para averiguar si esto ocurrió? No es que quiera evitar que esto ocurra, solo engancharme al evento. Preferiblemente algo como esto:
if (autoFilled == true) {
} else {
}
Si es posible, me encantaría ver un jsfiddle que muestre su respuesta.
Posibles duplicados
¿Evento DOM para autocompletar contraseña del navegador?
Autocompletado del navegador y eventos activados por Javascript
- Ambas preguntas no explican realmente qué eventos se activan, solo vuelven a verificar continuamente el cuadro de texto (¡no es bueno para el rendimiento!).
fuente
Respuestas:
El problema es que el autocompletado se maneja de manera diferente por diferentes navegadores. Algunos envían el evento de cambio, otros no. Por lo tanto, es casi imposible conectarse a un evento que se activa cuando el navegador completa automáticamente un campo de entrada.
Cambiar desencadenante de eventos para diferentes navegadores:
Para los campos de nombre de usuario / contraseña:
Para otros campos de formulario:
Sus mejores opciones son desactivar el autocompletado para un formulario usando
autocomplete="off"
en su formulario o sondear a intervalos regulares para ver si está lleno.Para su pregunta sobre si está lleno en o antes del documento, nuevamente varía de un navegador a otro e incluso de una versión a otra. Para los campos de nombre de usuario / contraseña solo cuando selecciona un campo de nombre de usuario y contraseña se completa Por lo tanto, tendrías un código muy desordenado si intentas adjuntarlo a cualquier evento.
Puedes leer bien aquí AQUÍ
fuente
input
evento. Eso es lo que Chrome dispara en autocompletar (y probablemente también en autocompletar, si Chrome tiene eso; siempre apago esto).Solución para navegadores WebKit
De los documentos de MDN para la pseudo-clase CSS : -webkit-autofill :
Podemos definir una regla CSS de transición nula en el
<input>
elemento deseado una vez que se:-webkit-autofill
edita. JS podrá conectarse alanimationstart
evento.Créditos al equipo de UI de Klarna . Vea su buena implementación aquí:
fuente
Esto funciona para mí en los últimos Firefox, Chrome y Edge:
fuente
'input'
! Esta fue la solución más fácil para mí, pero probé solo para autocompletar, no para autocompletar.Para el autocompletado de Google Chrome, esto funcionó para mí:
fuente
En caso de que alguien esté buscando una solución (como lo estaba yo hoy), para escuchar el cambio de autocompletar de un navegador, aquí hay un método jquery personalizado que he creado, solo para simplificar el proceso al agregar un detector de cambios a una entrada:
Puedes llamarlo así:
fuente
Estaba leyendo mucho sobre este problema y quería proporcionar una solución rápida que me ayudó.
dónde
inputBackgroundNormalState
para mi plantilla es 'rgb (255, 255, 255)'.Básicamente, cuando los navegadores aplican el autocompletado, tienden a indicar que la entrada se completa automáticamente aplicando un color amarillo diferente (molesto) en la entrada.
Editar: esto funciona para todos los navegadores
fuente
Desafortunadamente, la única forma confiable que he encontrado para verificar este navegador cruzado es sondear la entrada. Para hacerlo receptivo, también escuche los eventos. Chrome ha comenzado a ocultar los valores de autocompletar de javascript que necesita un hack.
Agregue una solución para los valores de contraseña de Autocompletar ocultos de Chrome.
fuente
Hay un nuevo componente polyfill para abordar este problema en github. Echa un vistazo al evento de autocompletar . Solo necesito instalarlo y listo, el autocompletado funciona como se esperaba.
fuente
Mi solución:
Escuche los
change
eventos como lo haría normalmente, y en la carga de contenido DOM, haga esto:Esto activará los eventos de cambio para todos los campos que no estén vacíos antes de que el usuario tenga la oportunidad de editarlos.
fuente
También enfrenté el mismo problema en el que la etiqueta no detectaba el autocompletado y la animación para mover la etiqueta al llenar el texto se superponía y esta solución funcionó para mí.
fuente
Estaba buscando algo similar. Solo Chrome ... En mi caso, la división del contenedor necesitaba saber si el campo de entrada se había completado automáticamente. Entonces podría darle CSS adicional al igual que Chrome hace en el campo de entrada cuando lo llena automáticamente. Al observar todas las respuestas anteriores, mi solución combinada fue la siguiente:
El html para que esto funcione sería
fuente
Sé que este es un hilo viejo pero puedo imaginar que muchos vienen a encontrar una solución a esto aquí.
Para hacer esto, puede verificar si las entradas tienen valores con:
Lo uso yo mismo para verificar los valores en mi formulario de inicio de sesión cuando se carga para habilitar el botón de envío. El código está hecho para jQuery pero es fácil de cambiar si es necesario.
fuente
($("#inputID:-webkit-autofill").val().length > 0) {
Esta es una solución para navegadores con motor de renderizado webkit . Cuando el formulario se completa automáticamente, las entradas obtendrán una pseudo clase : -webkit-autofill- (entrada de fe: -webkit-autofill {...}). Así que este es el identificador que debe verificar a través de JavaScript.
Solución con alguna forma de prueba:
Y javascript:
El problema cuando se carga la página es obtener el valor de la contraseña, incluso la longitud. Esto se debe a la seguridad del navegador. También el tiempo de espera , es porque el navegador completará el formulario después de una secuencia de tiempo.
Este código agregará la clase auto_filled a las entradas llenas. Además, intenté verificar el valor de la contraseña del tipo de entrada, o la longitud, pero funcionó justo después de que ocurriera algún evento en la página. Así que intenté desencadenar algún evento, pero sin éxito. Por ahora esta es mi solución. ¡Disfrutar!
fuente
Tengo la solución perfecta para esta pregunta, prueba este fragmento de código.
La demo está aquí
fuente
En Chrome, puede detectar campos de autocompletar configurando una regla css especial para elementos autocompletados y luego verificando con javascript si el elemento tiene esa regla aplicada.
Ejemplo:
CSS
JavaScript
fuente
Aquí hay una solución CSS tomada del equipo de Klarna UI. Vea su implementación agradable aquí recurso
Funciona bien para mi.
fuente
Usé esta solución para el mismo problema.
El código HTML debería cambiar a esto:
y el código jQuery debe estar en
document.ready
:fuente
Utilicé el evento de desenfoque en el nombre de usuario para verificar si el campo pwd se había llenado automáticamente.
Esto funciona para IE, y debería funcionar para todos los demás navegadores (solo he comprobado IE)
fuente
blur
evento. Aplico la misma función para elchange
yblur
eventos y funcionó muy bien. Una solución simple sin bibliotecas adicionales.Tuve el mismo problema y escribí esta solución.
Comienza a sondear en cada campo de entrada cuando se carga la página (configuré 10 segundos pero puede ajustar este valor).
Después de 10 segundos, deja de sondear en cada campo de entrada y comienza a sondear solo en la entrada enfocada (si corresponde). Se detiene cuando difumina la entrada y vuelve a comenzar si enfoca uno.
De esta manera, solo sondea cuando realmente se necesita y solo en una entrada válida.
No funciona bastante bien cuando tiene múltiples valores insertados automáticamente, pero podría modificarse buscando cada entrada en el formulario actual.
Algo como:
fuente
Si solo desea detectar si se ha usado o no el autocompletado, en lugar de detectar exactamente cuándo y en qué campo se ha usado el autocompletado, simplemente puede agregar un elemento oculto que se llenará automáticamente y luego verificar si esto contiene cualquier valor Entiendo que esto puede no ser lo que le interesa a muchas personas. Establezca el campo de entrada con un índice negativo tab y con coordenadas absolutas fuera de la pantalla. Es importante que la entrada sea parte de la misma forma que el resto de la entrada. Debe usar un nombre que será seleccionado por Autocompletar (por ejemplo, "segundo nombre").
Agregue esta entrada al formulario y verifique su valor al enviar el formulario.
fuente
No hace parece ser una solución a esto que no se base en el sondeo (al menos para Chrome). Es casi tan hostil, pero creo que es marginalmente mejor que las encuestas mundiales.
Considere el siguiente escenario:
El usuario comienza a completar el campo 1
El usuario selecciona una sugerencia de autocompletar que rellena automáticamente los campos 2 y 3
Solución: Registre un onblur en todos los campos que verifique la presencia de campos autocompletados a través del siguiente fragmento de jQuery $ (': - webkit-autofill')
Esto no será inmediato, ya que se retrasará hasta que el usuario difumine el campo1, pero no se basa en encuestas globales, por lo que, en mi opinión, es una mejor solución.
Dicho esto, dado que presionar la tecla Intro puede enviar un formulario, también puede necesitar un controlador correspondiente para onkeypress.
Alternativamente, puede usar el sondeo global para verificar $ (': - webkit-autofill')
fuente
Desde mi experiencia personal, el siguiente código funciona bien con Firefox IE y Safari, pero no funciona muy bien en la selección de autocompletar en Chrome.
El siguiente código funciona mejor, porque se activará cada vez que el usuario haga clic en el campo de entrada y desde allí puede verificar si el campo de entrada está vacío o no.
fuente
Tuve éxito en Chrome con:
fuente
Mi solución es:
fuente
Después de la investigación, el problema es que los navegadores webkit no activan el evento de cambio en el autocompletado. Mi solución fue obtener la clase de autocompletar que agrega webkit y activar el evento de cambio por mí mismo.
Aquí hay un enlace para el problema en cromo. https://bugs.chromium.org/p/chromium/issues/detail?id=636425
fuente
Para detectar el correo electrónico, por ejemplo, intenté "en cambio" y un observador de mutaciones, ninguno funcionó. setInterval funciona bien con el autocompletado de LinkedIn (no revela todo mi código, pero se entiende) y funciona bien con el backend si agrega condiciones adicionales aquí para ralentizar el AJAX. Y si no hay cambios en el campo del formulario, como si no estuvieran escribiendo para editar su correo electrónico, lastEmail evita los pings de AJAX sin sentido.
fuente
Me costó mucho detectar el autocompletado en Firefox. Esta es la única solución que funcionó para mí:
Manifestación
HTML:
CSS:
JavaScript:
Para Chrome uso:
if ($(this).css('animation-name') == 'onAutoFillStart')
Para Firefox:
if ($(this).val() != '')
fuente
probar en CSS
input:-webkit-autofill { border-color: #9B9FC4 !important; }
fuente