在刷新之前存储元素的数据

时间:2015-03-25 20:01:34

标签: javascript jquery local-storage

我有一个包含3个元素的网页,用户将在其中输入文本值,然后按一个按钮。在提交时,它将处理并返回一些要填充在表中的值。

这部分工作正常。

现在,如果用户刷新页面,则所有数据都将消失,3个元素和表格显示为空。

我想这样做。捕获刷新事件并将3个用户输入的值存储在本地存储中,当页面加载备份时,我会将其发送回控制器以再次填充表格。

这可能吗?我对网络开发很陌生,而且我的想法已经不多了。

这就是我尝试过的。这不起作用。

window.onbeforeunload = function() {
                localStorage.setItem(name, $('#name_field').val());
                localStorage.setItem(id, $('#id_field').val());
                localStorage.setItem(pw, $('#pw_field').val());
                alert("am here")
            }

            window.onload = function() {
                var name= localStorage.getItem(name);
                if (name != null) $('#name_field').val(name);
                var id= localStorage.getItem(id);
                if (id!= null) $('#id_field').val(id);
                var pw= localStorage.getItem(pw);
                if (pw!= null) $('#pw_field').val(pw);          
            }

我无法在 window.onbeforeunload 功能中弹出警告

1 个答案:

答案 0 :(得分:2)

您可以每次将其存储在本地存储(或事件会话存储,我认为在您的情况下更好)。然后每次你在存储上看那个值。如果找到任何值,则将其发送给控制器。

如果是我,我会按照上述说法将您的数据保存到sessionStorage(这意味着如果用户关闭标签/浏览器,数据将会丢失):

var saveData = function()
{
    var data = 
    {
        id: $("#id_field").val(),
        name: $("#name_field").val(),
        pw: $("#pw_field").val()
    };

   sessionStorage.setItem("formValues", JSON.stringify(data));
}

如果您的帖子是异步的,请点击。如果是异步,你可以在successCallback上调用该函数,如果它不是异步,则在提交事件上调用它。

然后在ready事件中,您可以阅读该数据:

$(document).ready(function()
{
    var data = sessionStorage.getItem("formValues");

    // Check if there is any user data already saved
    if (data)
    {
        data = JSON.parse(sessionStorage.getItem("formValues"));

        $("#id_field").val(data.id);
        $("#name_field").val(data.name);
        $("#pw_field").val(data.pw);
    }
});

我更喜欢将对象中的一组数据存储到存储上的单个键中,这就是我使用JSON来字符串化和解析对象的原因,因为存储只接受字符串类型。

一个简单的建议:不要 - 永远 - 存储密码,让用户输入密码。出于安全考虑。