我有一位同事向我求助,但我无法做到。基本上他创建了一个包含div元素和子div元素的纯java脚本页面。这些子div元素中的每一个都有一个表单。他希望能够将所有分层数据保存在文本文件中,无论它是否在json / html中,以后可以在其中加载它而无需再次手动处理它。这样,下次当人们加载页面时,他们会看到所有相同的信息和div元素。
因此,当您再次加载页面时,您可以简单地将json / html转储到DoM中,它将自动运行。他现在已经上了两天了,我想我会请你们帮忙或者至少引导我走上正确的道路。
答案 0 :(得分:1)
这样做需要三个步骤:
您可以将所有表单的数据转换为JSON对象,如下所示:
function getAllFormsData(){
var formsData = {}
for(var i=0;i<document.forms.length;i++){
var form = document.forms[i],
name = document.forms[i].name;
formsData[name] = {}
for(var j=0;j<form.elements.length;j++){
var element = form.elements[j];
if(element.type=="submit") continue;
formsData[name][element.name] = element.value;
}
}
return formsData;
}
所以formsData
是一个JSON对象,它包含页面上每个表单的属性(按名称,但你可以使用ID),每个属性的值都是一个包含每个输入元素的名称和值(除非它是submit
类型元素)。
用户点击页面上的“保存”按钮或使用window.onunload
事件可以触发保存数据。 (如果您使用的是localStorage,您还可以在setInterval
内设置每隔30秒触发一次的保存功能。)
localStorage非常简单(with a really easy API),但只允许字符串值。如果要将整个对象加载到其中而不必循环并保存每个值,则可以使用库。我发现store.js非常有用且简单明了,它会为您序列化数据,因此您无需使用JSON.parse
或JSON.stringify
。
因此,使用该库,保存功能可以简化为:
function saveAllFormsData(){
var data = getAllFormsData();
for(var formName in data)
store.set(formName, data[formName]);
}
在加载时,您可以调用此函数:
function restoreAllFormsData(){
var forms = document.forms;
for(var i=0;i<forms.length;i++){
var form = forms[i];
if(store.get(form.name)){
for(var j=0;j<form.elements.length;j++){
var element = form.elements[j];
if(element.type=="submit")
continue;
element.value = store.get(form.name)[element.name];
}
}
}
}
答案 1 :(得分:0)
我建议调查 HTML5 local storage。这将允许您在客户端上保存表单数据,可在必要时用于重新填充。
或者,您也可以在客户端上设置cookie。然而,该方法具有在前述文献中讨论的缺点。
由于这些数据存储方法的关键:值性质,这两种方法都可能需要您在存储之前stringify任何HTML。