【问题标题】:Save Form using localstorage HTML5使用 localstorage HTML5 保存表单
【发布时间】:2013-11-25 23:21:03
【问题描述】:

有没有办法将 from 保存到 localstorage 并再次重用它,就像这样的逻辑:

形成 ::::::::::::saveINTO:::::::::::::::> 本地存储

form <::::::::::::getfrom:::::::::::::::>本地存储

用数据填写表单后,我想将表单及其内容保存在本地存储中,然后当我想用存储的数据填写其他表单时。

<form>
    First name: <input type="text" name="firstname"><br>
    Last name: <input type="text" name="lastname">
    <button onclick="StoreData();">store into local storage</button>
</form> 
<button onclick="RenderForm();">render from data again </button>
<form id="Copyform"><form>

JSFIDDLE 请 JSFIDDLE 回答。

更新

【问题讨论】:

  • 你只能存储字符串,所以你必须先序列化你的表单元素的内容。
  • 您只想存储表单值对吗?
  • @CBroe 我知道我只能存储字符串,感谢您提供信息:P

标签: javascript jquery html forms local-storage


【解决方案1】:

你可以很容易地做到这一点,但如果你想存储一个数组,你需要先序列化或编码它,因为 localStorage 不处理数组。例如:

var yourObject = $('#your-form').serializeObject();

为了拯救你,你可以:

localStorage['variablename'] = JSON.stringify(yourObject)localStorage.setItem('testObject', JSON.stringify(yourObject));

并检索:JSON.parse(localStorage['yourObject']);JSON.parse(localStorage.getItem('yourObject'));,然后字段值可用作 yourObject.fieldName

编辑:在上面的示例中,我使用了一个 jQuery 插件 serializeObject。使用的代码如下。 (如果您愿意,可以使用 serializeArray,但您必须做更多工作才能使您的数据在检索后可用):

jQuery.fn.serializeObject = function () {
  var formData = {};
  var formArray = this.serializeArray();

  for(var i = 0, n = formArray.length; i < n; ++i)
    formData[formArray[i].name] = formArray[i].value;

  return formData;
};

【讨论】:

  • 如何检查本地存储是否启用
  • @spacebean 在获得我应该反序列化的项目后?
  • 是的,对不起 Moath,在上面添加了这个细节。
  • amdixon,有很多很好的资源,一个简单的就是这里的第一个答案:stackoverflow.com/questions/16427636/…。我假设 OP 仅适用于现代浏览器,并且已经考虑了与兼容性有关的问题。
  • .serializeObject()? discussonAPI Doc 说它不存在。你是说.serializeArray()api.jquery.com/serializeArray吗?
【解决方案2】:

另一种选择是使用现有插件。

例如,persisto 是一个开源项目,它为 localStorage/sessionStorage 提供了一个简单的接口,并自动化了表单字段(输入、单选按钮和复选框)的持久性。
(免责声明:我是作者。)

请注意,这需要 jQuery 作为依赖项。

例如:

<form id="originalForm">
    First name: <input type="text" name="firstname"><br>
    Last name: <input type="text" name="lastname">
    <button type="submit">store into local storage</button>
</form> 
<button id="renderForm">render from data again </button>
<form id="copyForm"><form>

可以这样处理:

// Maintain client's preferences in localStorage:
var settingsStore = PersistentObject("mySettings");

// Initialize form elements with currently stored data
settingsStore.writeToForm("#originalForm");

// Allow users to edit and save settings:
$("#settingsForm").submit(function(e){
  // ... maybe some validations here ...
  settingsStore.readFromForm(this);
  e.preventDefault();
});

// Write data to another form:
$("#renderForm").submit(function(e){
  settingsStore.writeToForm("#copyForm");
});

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 我认为 Github 项目链接非常稳定,但无论如何:我添加了一些细节。
  • 为了推荐一个库(尤其是您编写的库),您应该准确提供该库将如何解决 OP 的问题;包括使用您的库的代码,这将解决他们的确切问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2016-08-27
  • 2021-12-26
  • 2016-09-08
相关资源
最近更新 更多