わかりました、まだ端が荒いですが、ここにいくつかの概念実証があります:
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 の 1 つのフィールドに格納されます。
ページをロードすると、プロセスが逆になります。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);