制作页面告诉浏览器不要缓存/保留输入值

Posted

技术标签:

【中文标题】制作页面告诉浏览器不要缓存/保留输入值【英文标题】:Make page to tell browser not to cache/preserve input values 【发布时间】:2011-02-11 13:25:56 【问题描述】:

大多数浏览器缓存表单输入值。因此,当用户刷新页面时,输入具有相同的值。

这是我的问题。当用户单击保存时,服务器会验证 POST 数据(例如检查的产品),如果无效,则将其发送回浏览器。但是,如上所述,即使服务器清除了某些值的选择,它们仍然可能因为浏览器缓存而被选中!

我的数据有不可见的(直到父项被选中)复选框,所以用户可能甚至不知道某些先前的值仍然被选中,直到再次单击 保存 并收到错误消息 - 即使用户认为不是。这很烦人。

这可以通过执行 Ctrl + F5 来解决,但这甚至不是解决方案。是否有一种自动/编程方式告诉浏览器不要在某些表单/页面上缓存表单输入数据?

【问题讨论】:

<form autocomplete="off"... 适合您吗?这个问题是在所有浏览器中出现的,还是只出现在某个浏览器中? 有没有办法参考下拉<select> 列表来回答这个问题。我有一个列表并定义了一个 selected 选项,但刷新页面会保留以前选择的选项。 我想实现相反的效果 - 在后退按钮上保留每个页面的输入值(单击后退两次 - 相应地获取输入)。有很多使用大量 JS 代码的例子,(恕我直言,它们并没有真正起作用)但是 - 有没有更简单的方法?我在表单和输入字段上都尝试了 autocomplete="on" - 不起作用。浏览器是 Chrome。 【参考方案1】:

您是否明确将值设置为空白?例如:

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

这应该会阻止浏览器将数据放在不应该的地方。或者,您可以将autocomplete 属性添加到表单标签:

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

【讨论】:

我谈论的是复选框,所以我不能将值设置为“”。而且,自动完成关闭是否意味着“当用户按下 F5 时”不存储表单输入值,而不仅仅是“用于下拉自动完成列表”? 根据developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion, autcompletion=off 影响“会话历史缓存”,至少在 Gecko 中是这样。我会测试它是否能满足我的需要。 @queen3:是的,复选框是个问题,因为没有办法明确地说“未选中”。如果您仍然遇到问题,您可以尝试checked="false",它可能适用于某些浏览器。另一种选择是使用 javascript/jQuery 在页面加载时显式取消选中所有复选框。 @queen3,你的意思是“autocomplete=off”而不是“autocompletion=off” 所有的答案和建议都对我不起作用。使用 chrome 和开发 .net【参考方案2】:

另一种方法是在 html 中的表单之后使用 JavaScript 重置表单:

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

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

【讨论】:

【参考方案3】:

来自a Stack Overflow reference

如果浏览器已经保存了值,则它不适用于 value="",因此您应该添加。

对于输入标签,您可以设置属性自动完成:

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

您也可以对表单使用自动完成功能。

【讨论】:

在 Chrome 中,autocomplete="off" 在单个表单元素上使用时似乎没有效果 - 即使 value 属性显式设置为空白,并且在发送 Cache-Control: Must-Revalidate 标头时,这也没有效果.我必须将autocomplete="off" 属性应用于&lt;form&gt; 元素本身来抑制Chrome 中的这种行为。 我在表单上做了 autocomplete="off" 但它对我不起作用 我需要更多信息 @KingsleySimon 喜欢浏览器,您的浏览器上可能有一些设置会阻止正确的行为 浏览器的行为好像变了:developer.mozilla.org/en-US/docs/Web/Security/… 并注意 html 的有效形式。例如,它不是另一个等内的表单【参考方案4】:

清除缓存基本上有两种方式:

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

$('#Textfiledid').attr('autocomplete', 'off');

【讨论】:

【参考方案5】:

这在较新的浏览器中对我有用:

autocomplete="new-password"

【讨论】:

以上是关于制作页面告诉浏览器不要缓存/保留输入值的主要内容,如果未能解决你的问题,请参考以下文章

浏览器中回车和刷新的区别是啥

django 制作web网站,动态页面数据已更新,但是无法刷新,这是怎么回事?是页面缓存吗?

防止浏览器在 .NET Core 2.2 中缓存表单值

页面刷新后在文本输入上保留文本仅适用于某些浏览器

输入一个url到浏览器页面展示都经历了哪些过程

chrome缓存导致死循环事件