滥用 JavaScript 并 localStorage
为此...
要求
我假设你已经安装了 jQuery。如果没有,您必须将它包含在您的页面中,或者为基本的 JavaScript 重写一些函数。
我还假设您的用户正在运行一个相对较新的浏览器(尽管您可以使用 cookie 做很多相同的事情,解释如何设置它是另一个答案)并且没有禁用 JavaScript。
保存表格
首先,在您希望为其存储值的每个输入对象上附加一个类input-to-store
,然后当您的用户按下提交按钮时,而不是立即提交您的表单,让它首先调用一个调用的函数storeValues()
然后提交表单:
function storeValues() {
if(typeof(Storage) !== "undefined") {
localStorage.setItem('preserve', true);
$('.input-to-store').each(function() {
localStorage.setItem($(this).attr('id'), $(this).val());
});
}
}
注意:localStorage
并非普遍支持,因此此方法仅支持较新的浏览器(Firefox 3.5+、Chrome 4+、IE 8+)。如果不支持此方法,您可能希望else
在 cookie 中设置这些值。
根据您的表单,您可能希望保留未存储在.val()
访问器中的值。在这种情况下,添加另一个类并.each()
在每个类上执行一个函数。
重新加载表单时检索值
加载表单后,检查保留的值。如果找到,请将旧值重新加载到这些字段中:
if(typeof(Storage) !== "undefined") {
if(localStorage.getItem('preserve') === true) {
localStorage.setItem('preserve', false);
$('.input-to-store').each(function() {
if(value = localStorage.getItem($(this).attr('id')){
$(this).val(value);
}
}
}
}
localStorage
完成后清除
在您的成功页面上(在成功提交表单后),您需要清除localStorage
以防止您的应用程序浪费用户硬盘上的空间:
localStorage.clear();
希望这会有所帮助,尚未测试语法,但它应该让您了解如何使用localStorage
和绕过可怕的丢失形式来持久化数据。