动态表单会给浏览器带来后退按钮问题

时间:2019-03-07 07:12:02

标签: javascript jquery html browser back-button

我正在构建具有几种动态形式的PHP / Symfony应用程序。大多数形式简单明了,但有些形式更高级。高级表单包含以下元素:

  • 标签,该表格分为多个标签(Bootstrap CSS)。这些选项卡之间的导航是使用JavaScript完成的。​​

  • 集合,某些表单字段是集合,用户可以从DOM中添加/删除这些字段。使用JavaScript完成添加和删除操作。

  • 隐藏的字段,某些字段是隐藏的,只能通过(Bootstrap CSS)模式进行编辑。例如: name 字段的值显示在页面上,当用户单击它时,将出现一个带有额外字段的模式,例如 address 邮政编码城市。在模式中更新名称字段后,DOM也将更新以在页面上显示新名称。

这一切都非常简洁,但是当用户单击浏览器后退按钮时,会出现一些问题:

  • 标签,不再选择最后一个选择的标签。
  • 集合,DOM更改(添加和删除的字段)丢失。保留第一次加载页面时已经存在的字段的值。
  • 隐藏字段,保留字段的值,丢失对DOM的更改。

浏览器在页面加载时保存DOM,不保存DOM更改,但会将更改保存到在页面加载时加载的表单字段中。

这导致当单击浏览器后退按钮时部分还原表单的情况。如果是隐藏字段,则可能导致DOM无法代表底层隐藏字段的正确值。

我想创建一种情况,其中所有值和DOM更改被保留,或者。在搜索互联网时,我遇到了四种可能的解决方案:

  • 设置缓存头,请参见How to control web page caching, across all browsers?。似乎无法解决我的问题。

  • 向我的页面添加卸载事件以防止缓存。似乎无法解决我的问题。

  • 在我的表单或某些字段中添加autocomplete="off"。这是可行的,当单击浏览器的后退按钮时,所有更改都会撤消。不幸的是,这杀死了整个自动完成功能,这对于用户而言可能非常烦人。仍然值得进行权衡。

  • 将所有更改保存到localStorage或cookie,并在单击浏览器后退按钮时添加一些逻辑。对于这个特定项目来说,这似乎有些过大,但在将来的项目中可能是一个很好的解决方案。

我可以忽略一些解决方案吗?

0 个答案:

没有答案