¿Hay alguna forma válida de deshabilitar la función de autocompletar en un formulario HTML?

6 minutos de lectura

avatar de usuario de matt b
mate b

Al usar el xhtml1-transitional.dtd doctype, recopilando un número de tarjeta de crédito con el siguiente HTML

<input type="text" id="cardNumber" name="cardNumber" autocomplete="off"/>

marcará una advertencia en el validador W3C:

no hay atributo “autocompletar”.

¿Existe una forma compatible con los estándares para deshabilitar el autocompletado del navegador en campos confidenciales en un formulario?

  • ¿Estás seguro de que jugar con la configuración de autocompletar del usuario es lo que quieres hacer? Si lo tienen encendido, probablemente les guste. Autocompletar es una función completamente del lado del navegador, muy parecida al botón que permite al usuario cambiar el tamaño de fuente, etc. No debe interferir con sus deseos.

    – rmeador

    24 de febrero de 2009 a las 16:25

  • ¿Incluso para algo tan sensible como el número de tarjeta de crédito? No puedo pensar en muchas personas que quisieran recordar eso, especialmente porque la función de autocompletar está activada de forma predeterminada en la mayoría de los navegadores. Si quieren que se recuerde tanto, pueden usar algo que llene formularios como la barra de herramientas de Google.

    – mate b

    24 de febrero de 2009 a las 19:16

  • Mi caso de uso es ligeramente diferente: estoy implementando mi propio autocompletado y no quiero que entre en conflicto con el del navegador. Acabo de descubrir que autocomplete=”off” no es válido, pero parece que no hay otra solución simple (inyectarlo con js es una tontería)

    – el compañero

    11 de febrero de 2010 a las 17:27

  • @rmeador porque a veces queremos ofrecer una alternativa más fácil de usar al cuadro de sugerencias automáticas estándar. @corydoras, por favor, no presione su peso de OSX, no es útil para resolver esta pregunta.

    – josh m.

    7 de marzo de 2011 a las 21:54


  • El problema es que los bancos responsabilizarán al comerciante si se realizó una transacción fraudulenta… incluso si es culpa del cliente al 100%. Por lo tanto, en algunas circunstancias, es legítimo deshabilitar la función para el cliente.

    – Anon21

    23 de octubre de 2011 a las 18:52


Avatar de usuario de Nick Presta
nick presta

Aquí es un buen artículo del MDC que explica los problemas (y soluciones) para el autocompletado de formularios. Microsoft ha publicado algo similar. aquítambién.

Para ser honesto, si esto es algo importante para sus usuarios, ‘romper’ los estándares de esta manera parece apropiado. Por ejemplo, Amazon usa bastante el atributo ‘autocompletar’ y parece funcionar bien.

Si desea eliminar la advertencia por completo, puede usar JavaScript para aplicar el atributo a los navegadores que lo admitan (IE y Firefox son los navegadores importantes) usando someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );

Finalmente, si su sitio usa HTTPS, IE desactiva automáticamente el autocompletado (al igual que otros navegadores, que yo sepa).

Actualizar

Como esta respuesta todavía recibe bastantes votos a favor, solo quería señalar que en HTML5, puede usar el atributo ‘autocompletar’ en su elemento de formulario. Ver el documentación en W3C para ello.

  • Parece que Firefox no desactiva la función de autocompletar en https, pero ese es un conocimiento útil. ¡Gracias!

    – mate b

    24 de febrero de 2009 a las 16:17

  • Safari no respeta el atributo autocompletar=”desactivado”. Ver stackoverflow.com/questions/22817801/…

    – Skurpi

    9 de junio de 2014 a las 14:01

  • autocomplete puede ser usado no solo en form elementoy off el valor funciona al menos en chromium-40.0.2214.115

    – x-yuri

    3 de marzo de 2015 a las 21:29


  • El w3c parece estar ampliando los estándares para autocompletar en HTML5.1 (en borrador a partir de este comentario) w3c.github.io/html/…

    -Justin Nafe

    19 de abril de 2016 a las 17:23

  • Si nada funciona, use el área de texto en lugar del cuadro de texto para desactivar la función de autocompletar.

    – Abdul Rehman

    11 mayo 2016 a las 12:56

Avatar de usuario de Henrik Paul
henrik paul

Me sorprendería mucho que el W3C hubiera propuesto una forma que funcionara con (X)HTML4. La función de autocompletar está completamente basada en el navegador y se introdujo durante los últimos años (mucho después de que se escribiera el estándar HTML4).

Sin embargo, no me sorprendería si HTML5 tuviera uno.

Editar: Como yo pensaba, HTML5 lo hace tengo eso rasgo. Para definir su página como HTML5, use el siguiente tipo de documento (es decir, coloque esto como el primer texto en su código fuente). Tenga en cuenta que no todos los navegadores admiten este estándar, ya que todavía está en forma de borrador.

<!DOCTYPE html>

  • Todos los navegadores esperan que las versiones anteriores de Konqueror lo admitan. Incluso IE6 lo admite. Es el doctype para ir.

    – BalusC

    10 de agosto de 2010 a las 16:48


Avatar de usuario de RuudKok
RuudKok

HTML 4: No

HTML5: Sí

El atributo de autocompletar es un atributo enumerado. El atributo tiene dos estados. Él en la palabra clave se asigna al estado activado y el apagado
la palabra clave se asigna al estado desactivado. El atributo también se puede omitir. El valor que falta por defecto es el en Expresar. Él apagado state indica que, de forma predeterminada, los controles de formulario en el formulario tendrán su nombre de campo de autocompletar establecido en apagado; el estado activado indica que, de forma predeterminada, los controles de formulario en el formulario tendrán su autofill nombre de campo establecido en “on”.

Referencia: W3

  • @ freestock.tk Sí, es más claro que todos los demás. La simplicidad importa.

    – Sobrecodificador

    5 mayo 2016 a las 16:38

No, pero el autocompletado del navegador a menudo se activa cuando el campo tiene el mismo name atributo como campos que se completaron previamente. Si pudieras idear una manera inteligente de tener un nombre de campo aleatoriola función de autocompletar no podría extraer ningún valor ingresado previamente para el campo.

Si le diera a un campo de entrada un nombre como “email_<?= randomNumber() ?>“, y luego haga que el script que recibe estos datos recorra las variables POST o GET buscando algo que coincida con el patrón”email_[some number]“, podrías lograr esto, y esto tendría (prácticamente) el éxito garantizado, independientemente del navegador.

Avatar de usuario de David Waters
david aguas

No, un buen artículo está aquí en Wiki Mozila.

Continuaría usando el inválido attribute. Creo que aquí es donde el pragmatismo debería ganar a la validación.

Avatar de usuario de Peter Mortensen
Pedro Mortensen

¿Qué tal configurarlo con JavaScript?

var e = document.getElementById('cardNumber');
e.autocomplete="off"; // Maybe should be false

No es perfecto, pero su HTML será válido.

Avatar de usuario de Raptor
rapaz

Sugiero capturar los 4 tipos de entrada:

$('form,input,select,textarea').attr("autocomplete", "off");

Referencia:

  • podría utilizar :input también

    – Ascherer

    1 de junio de 2014 a las 21:18

¿Ha sido útil esta solución?