Javascript 如何在页面重新加载时清除HTML表单,而不是在用户导航回页面时清除?

Javascript 如何在页面重新加载时清除HTML表单,而不是在用户导航回页面时清除?,javascript,html,reload,back-button,Javascript,Html,Reload,Back Button,我使用的技巧是,将一些数据以隐藏的形式存储,以便能够将其持久化,这样当用户离开页面,然后使用“后退”按钮返回时,我可以将数据恢复到页面,而无需再次点击服务器 然而,这个技巧意味着当用户单击刷新或重新加载时也会发生同样的事情。。。(Firefox中的偶数移位重新加载)。我想检测用户是否正在单击“重新加载”,而不是单击“上一步”按钮,以便我可以重新开始重新加载,但在用户导航离开和返回时仍恢复以前的数据 有办法做到这一点吗?我一直在调查onbeforeunload事件等,但还没有找到任何答案 编辑以解

我使用的技巧是,将一些数据以隐藏的形式存储,以便能够将其持久化,这样当用户离开页面,然后使用“后退”按钮返回时,我可以将数据恢复到页面,而无需再次点击服务器

然而,这个技巧意味着当用户单击刷新或重新加载时也会发生同样的事情。。。(Firefox中的偶数移位重新加载)。我想检测用户是否正在单击“重新加载”,而不是单击“上一步”按钮,以便我可以重新开始重新加载,但在用户导航离开和返回时仍恢复以前的数据

有办法做到这一点吗?我一直在调查onbeforeunload事件等,但还没有找到任何答案

编辑以解决Josh提出的“为什么?”:

该页面是一个搜索结果页面,包含一系列AJAX过滤器。用户可能会花费相当多的时间调整过滤器,以获得他们想要的搜索结果集。。。然后,如果他们离开页面单击或在URL栏中键入新地址。。。然后回到页面,如果我不这样做,他们将不得不重新开始并再次进行所有过滤。对于我们为可用性测试引入的用户来说,这是一次非常令人沮丧的体验

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

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

  • 搜索页面上的结果包含时间敏感元素,用户可能希望获得更多最新结果
  • 有时可能会出现页面加载不正确的错误。在这两种情况下,如果我将页面恢复到保存状态,它们将得到相同的(旧的和/或损坏的)结果,而不是预期的新的/修复的结果

  • 希望这样可以清除它。

    当我加载包含表单的页面时,我会像您一样填写以前存储的值,然后从会话中清除数据。第二次页面刷新将找不到存储的数据,并提供一个空白表单。如果表单被重新提交,那么我会将新数据存储回会话中,准备按“后退”按钮……

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

    使用Fiddler或Firebug检查标题,看看您可以使用什么

    至少对于Firefox来说,点击F5会导致

    Cache-Control: max-age=0
    
    要发送的标题。按Ctrl-F5键发送这些

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

    有关其他浏览器行为的详细信息,请查看另一个问题。

    如果您无法使用基于表单的方法,您可能需要研究类似的“ajax历史记录”库。

    问题是此(隐藏)表单从未提交-数据仅从javascript写入(当用户与页面交互时,我将一个对象图序列化到它)如果它在页面加载时,它总是会被重新加载…这很有趣…看起来可能会很痛苦,因为我必须单独处理所有不同的浏览器,但我会进一步调查。