好的,尽管它的边缘仍然很粗糙,但这里有一些概念证明:
HTML:
<form>
<input name='abc' value='' />
<input name='def' value='' />
<input name='ghi' value='' />
<button type="button">Save</button>
</form>
JS:
$(function() {
var $form = $('form'),
$saveBtn = $('button'),
myForm = {},
myFormJsoned = localStorage.getItem('myform');
if (myFormJsoned) {
try {
myForm = JSON.parse(myFormJsoned);
$.each(myForm, function(i, obj) {
$form[0][obj.name].value = obj.value;
});
}
catch(e) {
localStorage.removeItem('myform');
}
}
$saveBtn.click(function() {
localStorage.setItem('myform',
JSON.stringify($form.serializeArray()));
});
});
关键是,当单击此按钮时,表单将使用该帮助 jQuery 方法序列化为一个数组(当然,使用serialize
会更加简单 - 如果unserialize
可用的话)。然后将其 JSON 化并存储到 localStorage 的单个字段中。
当你加载页面时,过程是相反的:JSON被解析成对象数组(jQuery.serializeArray的结果),这个AoO被再次插入到一个表单中(使用方便$.each
)。
你可能会问,这是什么概念?我的观点是,当然可以使用 localStorage,因为它是一个单字符串容器——比如 cookie。但话又说回来,我会考虑为每个字段使用单独的容器:
localStorage.setItem('myform_abc', $form[0].abc.value);
localStorage.setItem('myform_def', $form[0].def.value);
localStorage.setItem('myform_ghi', $form[0].ghi.value);