0

我一直在研究本地存储选项和插件,例如 Persist.js、sessvars.js 甚至 sisyphus.js——但我不确定是否有最合适的(尽管我相当确定我需要使用一个)。

第一页是一个表单,其中包含姓名、电话和电子邮件等数据的输入字段。只要需要更多输入,我就有一个复制包装器 div(及其输入)的按钮。当表单被填写时,用户点击提交,这会将他们带到“确认”类型的 php 页面。我需要在第 2 页上为用户提供一个“编辑”按钮,让他们回到第 1 页并保留所有信息。

在大多数情况下,一切都恢复正常,但如果用户在提交之前点击了“复制”按钮,然后点击了编辑,那么所有动态生成的输入都返回空并且 div 不再存在。有人建议我的变量不是持久的(当点击复制按钮时,带有 id="name1" 的输入变为 "name2" 等等)所以那时我发现了前面提到的插件。

有没有一种方法可以实现其中一个插件(或任何其他方法),以便当用户返回到第一页时,div 及其输入值保持不变?如果我走在正确的轨道上,有什么例子吗?

4

1 回答 1

0

欢迎来到堆栈溢出!我真的不知道这些插件,但在低级别他们可能使用 localStorage 或 sessionStorage (我认为这对你的问题更好,因为每次重新启动浏览器时它都会被清除,而不是 localStorage,这是永久性的,除非用户清除它)。

您的问题有一个非常简单的解决方案,尽管我没有看到一点代码就无法完全理解它。

但或多或少我建议您在动态生成字段时,用提交时存储的值预填充它们,即(假设您使用 jquery):

function generateFields(index) {
    $("<input/>")
          .attr("id","username_"+index)
          .val(getFieldValue("username_"+index))
          .change(function() {
                  setFieldValue("username_"+index, this.value);
          })
          .appendTo(fieldContainer);
    .
    .
    .
}

function getFieldValue(name) {
    return sessionStorage[name]||"";
}
function setFieldValue(name, value) {
    sessionStorage[name]=value||null;
}

这个想法是,在第一次运行时,getFieldValue(whatever) 将返回“”。然后,您分配用户在更改时输入的值。如果重新执行此代码,则字段将填充以前的值。

您还应该在适当的时候清除存储的值。

注意 - sessionStorage 和 localStorage 都是基本的 HTML/5 功能,它们在所有 HTML5 浏览器中都可用,但显然在(非常)旧的浏览器中不存在。希望能帮助到你!

于 2013-06-27T04:30:48.083 回答