Crear página para decirle al navegador que no almacene en caché / preserve los valores de entrada

116

La mayoría de los navegadores almacenan en caché los valores de entrada del formulario. Entonces, cuando el usuario actualiza una página, las entradas tienen los mismos valores.

Este es mi problema. Cuando un usuario hace clic en Guardar , el servidor valida los datos publicados (por ejemplo, productos comprobados) y, si no son válidos, los devuelve al navegador. Sin embargo, como se indicó anteriormente, incluso si el servidor borra la selección de algunos valores, ¡aún pueden seleccionarse debido a la caché del navegador!

Mis datos tienen casillas de verificación invisibles (hasta que se seleccione el elemento principal), por lo que es posible que el usuario ni siquiera sepa que algún valor anterior todavía está seleccionado, hasta que haga clic en Guardar nuevamente y obtenga un mensaje de error, aunque el usuario piense que no lo está. Lo que es irritante.

Esto se puede resolver haciendo Ctrl+ F5, pero ni siquiera es una solución. ¿Existe una forma automática / programática de decirle al navegador que no almacene en caché los datos de entrada del formulario en algún formulario / página?

queen3
fuente
1
¿Es <form autocomplete="off"...una opción para ti? ¿Este problema ocurre en todos los navegadores o solo en uno en particular?
David Kolar
¿Hay alguna manera de responder a esta pregunta con referencia a <select>listas desplegables ? Tengo una lista y he definido una selectedopción, pero al actualizar la página se conservan las opciones seleccionadas anteriormente.
Martin
Quiero lograr lo contrario: conservar los valores de entrada de cada página en el botón Atrás (haga clic en Atrás dos veces para obtener entradas en consecuencia). Hay varios ejemplos sobre el uso de mucho código JS (que realmente no funciona en mi humilde opinión) pero, ¿hay una manera más sencilla? Intenté autocomplete = "on" tanto en el formulario como en los campos de entrada, no funciona. El navegador es Chrome.
Dmitry z

Respuestas:

197

¿Está estableciendo explícitamente los valores en blanco? Por ejemplo:

<input type="text" name="textfield" value="">

Eso debería evitar que los navegadores coloquen datos donde no deberían. Alternativamente, puede agregar el autocompleteatributo a la etiqueta del formulario:

<form autocomplete="off" ...></form>
Cabra descontenta
fuente
1
Hablo de casillas de verificación, por lo que no puedo establecer el valor en "". Y, ¿el autocompletado desactivado significa no almacenar los valores de entrada del formulario "cuando el usuario presiona F5", no solo "para la lista desplegable de autocompletado"?
queen3
2
Según developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion , autcompletion = off afecta al "almacenamiento en caché del historial de sesiones", al menos en Gecko. Probaré si funciona para lo que necesito.
queen3
1
@ queen3: Sí, las casillas de verificación son un problema ya que no hay forma de decir explícitamente "no marcado". Si aún tiene problemas, puede intentarlo checked="false", es posible que funcione en algunos navegadores. Otra alternativa es usar Javascript / jQuery para desmarcar explícitamente todas las casillas de verificación al cargar la página.
DisgruntledGoat
1
@ queen3, te refieres a "autocomplete = off" no a "autocompletion = off"
Matt Baker,
2
Todas las respuestas y sugerencias no funcionaron para mí. Uso de chrome y desarrollo de .net
hakan
45

De una referencia de Stack Overflow

No funcionó con value = "" si el navegador ya guarda el valor, por lo que debe agregar.

Para una etiqueta de entrada, existe el atributo autocompletar que puede establecer:

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

También puede utilizar la función de autocompletar para un formulario.

Shareef
fuente
9
En Chrome, parece que autocomplete="off"no tiene ningún efecto cuando se usa en elementos de formulario individuales, incluso con el valueatributo establecido explícitamente en blanco, y al enviar un Cache-Control: Must-Revalidateencabezado, esto no tuvo ningún efecto. Tuve que aplicar el autocomplete="off"atributo al <form>elemento en sí para suprimir este comportamiento en Chrome.
mindplay.dk
Hice autocompletar = "apagado" en el formulario pero no funcionó para mí
Kingsley Simon
Necesito más información @KingsleySimon como navegador, y es posible que tenga algunas configuraciones en su navegador que impidan el comportamiento correcto
shareef
1
parece que el comportamiento del navegador ha cambiado: developer.mozilla.org/en-US/docs/Web/Security/…
david
y tenga en cuenta la forma html válida. y, por ejemplo, no es aform dentro de otro, etc
shareef
10

Otro enfoque sería restablecer el formulario usando JavaScript justo después del formulario en el HTML:

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>
pmko
fuente
8

Básicamente, hay dos formas de borrar la caché:

<form autocomplete="off"></form>

o

$('#Textfiledid').attr('autocomplete', 'off');
Anand Dwivedi
fuente
6

Esto funcionó para mí en los navegadores más nuevos:

autocomplete="new-password"
erikrunia
fuente