繁体   English   中英

如何在重新加载页面时清除HTML表单,但如何在用户导航回该页面时清除?

[英]How do you clear an HTML form on page reload but not when the user navigates BACK to the page?

我使用的技巧是,您以隐藏的形式存储一些数据以便能够持久保存它,以便当用户离开页面导航然后使用BACK按钮返回时,我可以将数据恢复到页面而无需再次点击服务器...

但是,此技巧意味着当用户单击刷新或重新加载...(甚至是Firefox中的shift-reload)时,也会发生相同的情况。 我想检测到用户单击的是重新加载,而不是单击“后退”按钮,这样我就可以重新加载时重新开始,但是当用户离开并返回时仍可以恢复以前的数据。

有没有办法做到这一点? 我一直在研究onbeforeunload事件等,但还没有发现任何东西。

编辑以解决乔什的“为什么?”问题:

该页面是带有一堆AJAX过滤器的搜索结果页面。 用户可能会花费大量时间来调整过滤器,以获取所需的搜索结果集...然后,如果他们单击离开页面或在URL栏中输入新地址...然后返回到页面上,如果我不做这样的事情,他们将不得不重新开始并再次进行所有过滤。 对于我们引入可用性测试的用户而言,这是非常令人沮丧的体验。

精通技术的用户可以通过打开新标签页而不是单击/键入来解决此问题,但是不幸的是,我们绝大多数用户都不精通技术,因此显而易见的解决方案是让页面还原当用户导航回到页面时过滤/结果。

另一方面,我可以想到两个原因,为什么用户可能会重新加载页面:

  1. 搜索页面上的结果中包含一个对时间敏感的元素,用户可能希望获取更多最新的结果。
  2. 有时,页面无法正确加载时可能会出现错误。 在这两种情况下,如果我将页面还原到保存状态,它们将得到相同(旧的和/或损坏的)结果,而不是他们期望的新的/固定的结果。

希望能清除它。

您可以在服务器端通过查看随请求发送的标头来执行此操作。 用户执行刷新或硬刷新时,将使用某些标头。

使用Fiddler或Firebug检查标头以查看可以使用的内容。

至少对于Firefox,按F5会导致

Cache-Control: max-age=0

要发送的标头。 做一个Ctrl-F5发送这些

Pragma: no-cache
Cache-Control: no-cache

有关其他浏览器行为的细分,请查看对另一个问题的出色回答

如果您无法使用基于表单的方法,则可能需要研究像RSH这样的“ ajax历史”库。

当我加载包含表单的页面时,我会像以前一样填写以前存储的值,然后从会话中清除该数据。 第二页刷新将找不到任何存储的数据并提供空白表格。 如果重新提交表单,则我将新数据存储回会话中,准备按后退按钮...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM