我了解当您通过后退按钮返回页面时,复选框将保持选中状态。使用 jquery 的 addClass 添加的类却没有。有人可以帮助我了解通过后退按钮返回时某些事情何时会持续存在吗?另外,有没有办法保存变量的值,以便我可以使用变量值重新创建不持久的对象?
4 回答
什么都不会持久 - 类不会持久,因为 DOM 重新生成,JS 变量不会持久,因为代码被重新执行等。同时,浏览器实现似乎非常同意保留用户输入的表单数据以方便,即使这种行为不是任何官方规范的一部分。
如果您需要一些数据在客户端保留 - 您很可能在架构上做错了什么。为什么你试图覆盖浏览器的“返回”按钮行为,让用户回到任意状态,而不是转到以前的 URL 并重新呈现页面?如果您的应用程序交互繁重,并且需要这种“后退”按钮行为,您可能希望放弃让用户在独立页面之间导航,转而使用 AJAX 请求并依赖诸如html5 history api之类的东西来执行任何将页面置于所需状态的任意代码。
您没有详细了解您实际期望存储的内容 - 也许localStorage或 cookie 替代品会更合适
更新:
我已经整理了一个小提琴来测试遍历历史时表单数据的持久性,并且隐藏字段可供JS 处理-尽管 imo 仍然不是一个好主意
现代浏览器试图越来越多地坚持下去。Firefox 几年前尝试保留包括类名更改在内的所有内容,只要服务器指示该页面可在 HTTP 标头中缓存并且该网页尚未注册任何onunload
事件处理程序。Firefox 会onpageshow
在onpagehide
用户按下后触发。
https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
这在很大程度上取决于您是否处理网址的哈希值,即如果您这样做,您可以坚持一切。
编辑:
您必须熟悉单页应用程序 (SPA) 的概念。
由于能够更改位置哈希属性和管理浏览器历史记录,这一切都成为可能。
为了使这个简单,有很多像Sammy.js这样的库
每次让用户执行操作时,您都会推送新状态,因此您将能够处理按下后退按钮。
为了了解它的外观,请检查以下jsfiddle
在您看到设置的代码中routes
:
Sammy(function() {
this.get('#:folder', function() { ... });
this.get('#:folder/:mailId', function() { ... });
})).run();
哪个指定哈希,即www.mygreatwebsite.com/#inbox/#1
您的应用程序将如何处理它。
这里还有更多内容,所以我的链接只是您探索的起点。
补充上述答案,您可以使用视图状态保存表单状态。
ViewState 允许 ASP.NET 在每次回发到服务器时重新填充表单字段,以确保在用户点击提交按钮时不会自动清除表单。