2008-11-18 8 views
58

estoy recargando una página web que tiene el siguiente código:¿Por qué la casilla de verificación permanece activada al volver a cargar la página?

<label for="showimage">Show Image</label> 
<input id="showimage" name="showimage" type="checkbox" value="1" /> 

pesar de que el HTML se mantiene envía al navegador es la misma para cada recarga de la página, la casilla de verificación siempre toma el valor comprobado cuando una recarga fue realizada. En otras palabras, si el usuario marca la casilla de verificación y vuelve a cargar, la casilla de verificación todavía está marcada.

¿Hay algún almacenamiento en caché pasando aquí?

Editar: Intenté la solución de Gordon Bell a continuación y veo que esto todavía está sucediendo incluso después de eliminar el valor = "1". ¿Algo más que pueda estar perdiendo?

<label for="showimage">Show Image</label> 
<input id="showimage" name="showimage" type="checkbox" /> 

Respuesta

28

Sí, creo que es el almacenamiento en caché. Veo este comportamiento en Firefox por ejemplo (no Safari, por lo que vale :)).

puede volver a cargar la página y pasar por alto el caché (en Firefox) usando CTRL - SHIFT - R y verá el valor de comprobación no lleva (una normal de CTRL - R se agarra la información de la caché sin embargo)

edición: yo era capaz de desactivar este lado del servidor en Firefox, el establecimiento de una cabecera de control de caché:

Cache-Control: no-store 

esto parece desactivar la función "recordar valores de la forma" de Firefox

+0

Sí, CTRL-SHIFT-R hace que las casillas de verificación se restablezcan. ¿Hay alguna manera de evitar que esto se guarde en la memoria caché? – Readonly

+0

no lo creo (al menos no desde el lado del servidor). Firefox es realmente agresivo en el almacenamiento en caché de cosas. Solo he podido hacer que deje de almacenar en caché de forma confiable en situaciones como esta desde el lado del cliente – Owen

+0

No está relacionado con la caché como tal, solo que una recarga dura también desactiva la función deliberada de recordar los contenidos del formulario. El mismo comportamiento también afecta a los campos de texto, menús, etc. – bobince

2

Es una buena característica de Firefox: si escribe algo, pero recargar la página, el texto permanece en el área de texto. Idem para otros ajustes que haya elegido.

Por desgracia, no funciona en el SO (probablemente restablecer de JS) y los navegadores más mudos como IE ...

que sugieren una solución: si realmente necesita hacer eso, restablecer el formulario con JS. form.reset() puede hacer el trabajo (actúa como el botón de reinicio).

+1

Parece un poco hacky, o como disparar a un gorrión con un cañón. –

+0

@ MészárosLajos ¿Qué es hacky/overkill, y por qué lo ves como tal? ¿Ves algo más simple? – PhiLho

+0

¿Qué sucede si solo quiere que el formulario se reinicie parcialmente? Yo, personalmente, solo quiero desactivar el caché de entrada para las casillas de verificación, pero no para los campos de texto. Estoy totalmente de acuerdo con usted en que esta es una buena característica de Firefox, pero no para los botones personalizados de dos estados, que básicamente son cajas rediseñadas. Otra cosa es, ¿por qué usar javascript, donde simplemente puede usar una propiedad html para evitar este comportamiento? Y sí, lo sé, "autocompletar = apagado" hace que el código html no sea válido, pero la página sigue funcionando. –

0

o en lugar de introducir presione F5 en la barra de direcciones :)

+0

O sugiera al usuario que haga eso, más bien (esta es una pregunta del desarrollador). –

+0

No podemos esperar que los usuarios siempre actualicen la página con Crtl + Shift + R, ¿no? –

0

Podría ser debido a un almacenamiento en caché del navegador - muy útil para los sitios web estáticas que no se cambian muy a menudo, muy malo para aplicaciones web dinámicas.
Pruebe con esas dos metaetiquetas en la sección de encabezado de la página. La segunda metaetiqueta es para navegadores más antiguos (IE5) que no reconocen la metaetiqueta "sin memoria caché" y aunque diferente produce el mismo resultado: cada solicitud va al servidor.

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
+0

¿Realmente nos importan los navegadores tan antiguos, como IE5? Por cierto, enviar los encabezados con PHP parece un poco mejor, porque usas menos metaetiquetas en el –

+2

Su respuesta fue en 2008, el comentario de @MészárosLajos fue en 2014. En ese momento, sí, sí importaba. – Duniyadnd

109

Añadir autocomplete="off" en el elemento de formulario en la página. La desventaja es que no es XHTML válido, pero soluciona el problema sin ningún javascript intrincado.

+0

Funciona para mí, donde el encabezado de control de caché no funciona. –

+5

Según lo que estoy [leyendo] (http://www.w3schools.com/html/html_form_attributes.asp), en realidad es válido en HTML5. (He subido el comentario anterior antes de leer más sobre el tema.) De modo que use el autocompletado como contenido de corazón en casillas de verificación si está usando HTML5. – EF0

29

establecer autocomplete = "off" con js también está funcionando bien.

por ejemplo usando jquery:.

$(":checkbox").attr("autocomplete", "off"); 
+0

Gracias, eso me ayudó mucho.:) –

+1

Encontré que necesitabas '$ (" # formId "). Attr (" autocompletar "," off ")' donde '# formId' es el id de tu formulario. –

+0

@DanDiplo hay muchas ocasiones en las que usamos una casilla de verificación sin un formulario, por lo tanto, es ilógico aplicarlo ("#formId"). Attr ("autocompletar", "desactivar") –

0

$ ("# ShowImage") prop ("marcada", false);

0

la idea pública para resolver ese

forma maquillaje botón de reinicio &

<form> 
<checkbox> 
<reset> 
</form> 

$(reset).trigger("click");//to clear the cache and input 
$(checkbox).trigger("click");//to mark checkbox 
Cuestiones relacionadas