【发布时间】:2021-05-20 21:03:55
【问题描述】:
我正在尝试使用 unobtrusive-ajax 来允许站点在 JavaScript 可用时将其内容更新为 AJAX,如果不可用则作为静态页面。我想支持浏览器的Back按钮历史倒退。
当用户浏览网站时,我正在使用 JavaScript 的历史 API 来操纵浏览器历史记录。我将 HTML(通过 innerHTML)和 DOM 的当前状态(通过 JQuery 的 serialize 方法)存储在历史对象中。当用户点击Back时,分别从缓存的HTML和序列化的DOM中恢复HTML和DOM。
但是,我丢失了有关在页面加载 ("checked"="checked") 时选中但用户未选中的复选框的信息。
根据https://api.jquery.com/serialize/ 的 JQuery 文档
复选框和单选按钮(“radio”或“checkbox”类型的输入)的值仅在它们被选中时才被包含在内。
这里的“值”指的是选中状态,而不是复选框的value。
这是错误的设计吗?当它与 HTML 不同时,它不应该包含检查值 吗?
有条件序列化的其他元素上是否还有其他属性?
【问题讨论】:
-
用户前进时复选框的状态没有保存在任何地方?
-
@Twisty 复选框的状态保存在服务器端,但背面的浏览器无法使用。如果选中它,它只会保存在客户端(解决方法是在 DOM 恢复之前取消选中所有框,但这似乎很hacky)。
标签: html jquery dom unobtrusive-ajax