Deshabilitar autocompletar a través de CSS


94

¿Es posible usar CSS para deshabilitar el autocompletar en un elemento de formulario (específicamente un campo de texto)?

Utilizo una biblioteca de etiquetas que no permite el elemento de autocompletar y me gustaría deshabilitar el autocompletar sin usar Javascript.

Respuestas:


52

Puede usar un campo de texto generado idy namecada vez, que es diferente, por lo que el navegador no puede recordar este campo de texto y no podrá sugerir algunos valores.

Esta es al menos la alternativa segura para todos los navegadores, pero recomendaría ir con la respuesta de RobertsonM ( autocomplete="off").


4
Un efecto secundario de esto es que el historial del navegador se satura con muchos campos de formulario diferentes (aleatorios). Cada búsqueda de valores conocidos en las bases de datos locales de los navegadores llevará algún tiempo.
Dermatias

4
Buena idea, pero no evita que los números de tarjetas de crédito se guarden en la base de datos de autocompletar sin cifrar.
Hans-Peter Störr

Si no usa nombres / ID de control estático, cualquier secuencia de comandos se romperá y cualquier recopilación de datos de formulario también se interrumpirá (a menos que todos los aspectos de su aplicación conozcan la nueva convención de nomenclatura y también estén actualizando dinámicamente cualquier recopilación de secuencias de comandos / datos ).
Gary Richter

Si debe evitar el autocompletado, "aleatorizar" los nombres de los campos es el único camino a seguir. El uso de cualquier sugerencia como autocomplete="off"se ignorará en la versión del navegador X (actual + 1). (Por ejemplo, la última versión de Google Chrome ignora autocompletar = desactivado).
Mikko Rantalainen

@kmoser: Incluso si anula la función de autocompletar del navegador aleatorizando el elemento id, aún lo guardará en la caché (es decir, en el disco duro de un usuario). Lo cual es algo horrible para hacer con el número de tarjeta de crédito de alguien o cualquier otra información confidencial. Además, satura innecesariamente las unidades de disco de su usuario. Cada vez que visitan su página, se guardará un archivo nuevo (similar a una cookie) en su computadora. Solo por el gusto de hacerlo, intente borrar su caché de Chrome y vea cuánto espacio liberará (si no lo ha hecho durante un tiempo). Por eso lo llamo una idea horrible.
c00000fd

129

Tal como está, no hay ningún atributo de "autocompletar desactivado" en CSS. Sin embargo, html tiene un código sencillo para esto:

<input type="text" id="foo" value="bar" autocomplete="off" />

Si está buscando un efector para todo el sitio, uno fácil sería simplemente tener una función js para ejecutar todas las 'entradas' y agregar esta etiqueta, o buscar la clase / id css correspondiente.

El atributo de autocompletar funciona bien en Chrome y Firefox (!), Pero consulte también ¿Existe una forma válida de W3C para deshabilitar el autocompletar en un formulario HTML?


4
developer.mozilla.org/en-US/docs/Web/Security/… sugiere autocomplete="anyrandominvalidvalue"que funcionará.
Andrew Stalker

49

puedes implementar fácilmente con jQuery

$('input').attr('autocomplete','off');

4
En la mayoría de los casos, $ ('form'). Attr ('autocomplete', 'off'); es mucho más eficiente (ver comentario a una respuesta a continuación)
irakli

@irakli En mi caso, usar formes lo ÚNICO que funcionó. No input. Gracias.
Khaverim

1
Hola, 2018 y esta es la única forma en que puedo hacer que esto funcione en estos días. Además, @irakli, esto es cierto si necesita usar en un formulario completo el formulario como selector.
Devon Kiss

15

Si está utilizando un form, puede deshabilitar todos los autocompletar con,

<form id="Form1" runat="server" autocomplete="off">

de hecho, según Mozilla: "Si el atributo de autocompletar no se especifica en un elemento de entrada, entonces el navegador usa el valor del atributo de autocompletar del propietario del formulario del elemento <input>. El propietario del formulario es el elemento del formulario que este elemento <input> un descendiente de o el elemento de formulario cuyo id se especifica mediante el atributo de formulario del elemento de entrada. Para obtener más información, consulte el atributo de autocompletar en <form>. " considerando esto, una alternativa de jQuery mucho más eficiente a la que se muestra arriba sería: $ ('formulario'). attr ('autocomplete', 'off');
irakli

13

CSS no tiene esta capacidad. Debería utilizar secuencias de comandos del lado del cliente.


1
¿Alguna idea de cómo desactivar esto en el borde? No importa lo que hagamos, lo vemos.
Benjamin Gruenbaum

@BenjaminGruenbaum El uso autocomplete="false"funcionará en Edge. Técnicamente, cualquier valor no válido puede ir en lugar de "falso" aquí.
Andrew

4

Intenté todas las formas sugeridas de las respuestas a esta pregunta y otros artículos en la web, pero de todos modos no funcionó. Intenté autocomplete = "new-random-value", autocomplete = "off" en el elemento de formulario, usando el script del lado del cliente como se muestra a continuación pero fuera de $ (document) .ready () como uno de los usuarios mencionó:

$(':input').on('focus', function () {
  $(this).attr('autocomplete', 'off')
});

¡Quizás encontré otra prioridad en el navegador debido a este comportamiento extraño! Así que busqué más y finalmente, volví a leer detenidamente las líneas de este buen artículo a continuación :

Por esta razón, muchos navegadores modernos no admiten autocomplete = "off" para los campos de inicio de sesión:

Si un sitio establece autocomplete = "off" para a, y el formulario incluye campos de entrada de nombre de usuario y contraseña, el navegador todavía ofrecerá recordar este inicio de sesión y, si el usuario está de acuerdo, el navegador completará automáticamente esos campos la próxima vez que el usuario visita la página. Si un sitio establece autocomplete = "off" para los campos de nombre de usuario y contraseña, el navegador aún ofrecerá recordar este inicio de sesión, y si el usuario está de acuerdo, el navegador completará automáticamente esos campos la próxima vez que el usuario visite la página. Este es el comportamiento en Firefox (desde la versión 38), Google Chrome (desde 34) e Internet Explorer (desde la versión 11).

Si está definiendo una página de administración de usuarios en la que un usuario puede especificar una nueva contraseña para otra persona y, por lo tanto, desea evitar el autocompletado de los campos de contraseña, puede usar autocomplete = "new-password" ; sin embargo, la compatibilidad con este valor no se ha implementado en Firefox.

Simplemente funcionó. Probé en Chrome especialmente y espero que esto siga funcionando y ayude a otros.


1

Resolví el problema agregando un nombre falso de autocompletar para todas las entradas.

$("input").attr("autocomplete", "fake-name-disable-autofill");

0

Gracias a la solución de @ ahhmarr pude resolver el mismo problema en mi entorno de enrutador de interfaz de usuario Angular + , que compartiré aquí para quienes estén interesados.

En mi index.htmlhe agregado el siguiente script:

<script type="text/javascript">
    setTimeout(function() {
        $('input').attr('autocomplete', 'off');
    }, 2000);
</script>

Luego, para cubrir los cambios de estado, agregué lo siguiente en mi controlador raíz:

$rootScope.$on('$stateChangeStart', function() {
                $timeout(function () {
                    $('input').attr('autocomplete', 'off');
                }, 2000);
            });

Los tiempos de espera son para que html se procese antes de aplicar jquery.

Si encuentra una solución mejor, hágamelo saber.


0

No puede usar CSS para deshabilitar el autocompletado, pero puede usar HTML:

<input type="text" autocomplete="false" />

Técnicamente, puede reemplazarlo falsecon cualquier valor no válido y funcionará. Este iOS es la única solución que he encontrado que también funciona en Edge.


0

Hay 3 formas de hacerlo, las menciono en orden de ser la mejor manera ...

Forma 1-HTML:

<input type="text" autocomplete="false" />

2-forma Javascript:

document.getElementById("input-id").getAttribute("autocomplete") = "off";

3-jQuery forma:

$('input').attr('autocomplete','off');

0

Solo uso 'new-password'en su lugar 'off'en autocompletar.

y también intenté usar este código y funciona (al menos de mi parte), uso WP y GravityForm para su información

$('input').attr('autocomplete','new-password');

-5
$('input').attr('autocomplete','off');

3
Esto no proporciona una respuesta a la pregunta formulada. OP solicitó específicamente una solución CSS. Además, es exactamente la misma respuesta que una ya existente.
Holger Just
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.