Faça a página para dizer ao navegador para não armazenar em cache / preservar os valores de entrada

116

A maioria dos navegadores armazena em cache os valores de entrada do formulário. Portanto, quando o usuário atualiza uma página, as entradas têm os mesmos valores.

Aqui está meu problema. Quando um usuário clica em Salvar , o servidor valida os dados POSTados (por exemplo, produtos verificados) e, se não forem válidos, os envia de volta ao navegador. No entanto, conforme declarado acima, mesmo se o servidor limpar a seleção de alguns valores, eles ainda podem ser selecionados por causa do cache do navegador!

Meus dados têm caixas de seleção invisíveis (até que o item pai seja selecionado), de modo que o usuário pode até não saber que algum valor anterior ainda está selecionado, até clicar em Salvar novamente e receber uma mensagem de erro - mesmo que o usuário pense que não. O que é irritante.

Isso pode ser resolvido fazendo Ctrl+ F5, mas não é nem mesmo uma solução. Existe uma maneira automática / programática de dizer ao navegador para não armazenar em cache os dados de entrada do formulário em algum formulário / página?

queen3
fonte
1
É <form autocomplete="off"...uma opção para você? Este problema está ocorrendo em todos os navegadores ou apenas em um em particular?
David Kolar
Existe uma maneira de responder a essa pergunta com referência a <select>listas suspensas . Eu tenho uma lista e defini uma selectedescolha, mas atualizar a página mantém as opções selecionadas anteriormente.
Martin
Eu quero alcançar o oposto - preservar os valores de entrada de cada página no botão Voltar (clique duas vezes para obter as entradas de acordo). Existem vários exemplos de uso de muito código JS (que realmente não funciona IMHO), mas - existe uma maneira mais simples? Tentei autocomplete = "on" nos campos de formulário e de entrada - não funciona. O navegador é o Chrome.
Dmitry z

Respostas:

197

Você está definindo explicitamente os valores como em branco? Por exemplo:

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

Isso deve impedir os navegadores de colocar dados onde não deveriam. Como alternativa, você pode adicionar o autocompleteatributo à tag do formulário:

<form autocomplete="off" ...></form>
DisgruntledGoat
fonte
1
Falo sobre caixas de seleção, então não posso definir o valor para "". E o preenchimento automático desativado significa não armazenar os valores de entrada do formulário "quando o usuário pressiona F5", não apenas "para a lista suspensa de preenchimento automático"?
rainha3,
2
De acordo com developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion , autcompletion = off afeta "Cache de histórico de sessão", pelo menos no Gecko. Vou testar se funciona para o que preciso.
rainha3,
1
@ queen3: Sim, as caixas de seleção são um problema, pois não há como dizer explicitamente "não marcada". Se ainda estiver tendo problemas, você pode tentar checked="false", pode funcionar em alguns navegadores. Outra alternativa é usar Javascript / jQuery para desmarcar explicitamente todas as caixas de seleção no carregamento da página.
DisgruntledGoat
1
@ queen3, você quer dizer "autocomplete = off" e não "autocompletion = off"
Matt Baker
2
Todas as respostas e sugestões não funcionaram para mim. Usando o Chrome e .net develeoping
hakan
45

De uma referência de Stack Overflow

Não funcionou com value = "" se o navegador já salvou o valor, então você deve adicionar.

Para uma tag de entrada, há o atributo autocomplete que você pode definir:

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

Você também pode usar o preenchimento automático para um formulário.

Shareef
fonte
9
No Chrome, parece autocomplete="off"não ter efeito quando usado em elementos de formulário individuais - mesmo com o valueatributo explicitamente definido em branco, e ao enviar um Cache-Control: Must-Revalidatecabeçalho, isso não teve efeito. Tive que aplicar o autocomplete="off"atributo ao <form>próprio elemento para suprimir esse comportamento no Chrome.
mindplay.dk
Eu fiz autocomplete = "off" no formulário, mas não funcionou para mim
Kingsley Simon
Preciso de mais informações, como o navegador @KingsleySimon, e você pode ter algumas configurações em seu navegador que impedem o comportamento correto
shareef
1
parece que o comportamento do navegador mudou: developer.mozilla.org/en-US/docs/Web/Security/…
david
e observe o formulário html válido. e por exemplo não é um formulário dentro de outro etc
shareef
10

Outra abordagem seria redefinir o formulário usando JavaScript logo após o formulário no HTML:

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

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

Basicamente, existem duas maneiras de limpar o cache:

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

ou

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

Isso funcionou para mim em navegadores mais recentes:

autocomplete="new-password"
Erikrunia
fonte