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.

David
fuente

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").

Christopher Klewes
fuente
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?

RobertsonM
fuente
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');
ahhmarr
fuente
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">
Ernesto
fuente
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.

Sampson
fuente
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.

QMaster
fuente
1

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

$("input").attr("autocomplete", "fake-name-disable-autofill");
Webdma
fuente
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.

TrampGuy
fuente
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.

Andrés
fuente
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');
sina
fuente
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');
Kusukacoklat
fuente
-5
$('input').attr('autocomplete','off');
rohit
fuente
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