sessionStorage在一个字段中返回undefined,但在其他字段中有效

时间:2017-04-06 07:14:18

标签: javascript undefined session-storage

我有这段代码:

// Run on page load
window.onload = function() {

    // If values are not blank, restore them to the fields
    var personal_number = sessionStorage.getItem('personal_number');
    if (personal_number !== undefined){
        $('#personal_number').val(personal_number);
    }

    var email = sessionStorage.getItem('email');
    if (email !== undefined){
        $('#username').val(email);
    }

    var password= sessionStorage.getItem('password');
    if (password !== undefined){
        $('#password').val(password);
    }
}

// Before refreshing the page, save the form data to sessionStorage
window.onbeforeunload = function() {
    sessionStorage.setItem("personal_number", $('#personal_number').val());
    sessionStorage.setItem("email", $('#username').val());
    sessionStorage.setItem("password", $('#password').val());
}

这"工作"如果我向personal_numberemailpassword添加一个值,它会保存到我的sessionStorage中,当我刷新页面时,我的输入字段会正确填充。

但是当我转到另一个页面(在同一个网站内)并返回时,我会在undefined输入字段中输出personal_number并在其他字段中输出正确的值。

我不明白为什么!

首先,如果值为undefined,则不应输出任何内容,因为:if (personal_number !== undefined)

第二,怎么只有personal_number不起作用而其他两个字段都没问题呢?

更新

我删除了密码字段,因为缓存它是不安全的。

我也弄清楚导致问题的原因,但我没有解决了它。

当我访问没有输入fiels的页面然后返回时,现在,我的所有字段都输出undefined。因此,当我这样做时,我似乎得到了一个新的会话。

但是为什么它仍然输出undefined

(function ($) {
    // Run on page load
    window.onload = function() {
        var person_number = sessionStorage.getItem("person_number");
        var email = sessionStorage.getItem("email");

        if (person_number !== undefined || person_number !== null ||
            person_number != undefined || person_number != null){
            $('#person_number').val(person_number);
        }
        if (email !== undefined || email !== null || 
            email != undefined || email != null){
            $('#username').val(email);
        }
    }

    // Before refreshing the page, save the form data to sessionStorage
    window.onbeforeunload = function() {
        sessionStorage.setItem("person_number", $('#person_number').val());
        sessionStorage.setItem("email", $('#username').val());
    }
})(jQuery);

我知道我正在测试很多,但是这不应该输出undefined !!

更新2

我也对其进行了更新,因此如果输入为undefined / null,则无法保存输入。但它仍然不起作用..

(function ($) {
    // Run on page load
    window.onload = function() {
        var person_number = sessionStorage.getItem("person_number");
        var email = sessionStorage.getItem("email");

        if (person_number !== undefined || person_number !== null ||
            person_number != undefined || person_number != null){
            $('#person_number').val(person_number);
        }
        if (email !== undefined || email !== null ||
            email != undefined || email != null){
            $('#username').val(email);
        }
    }

    // Before refreshing the page, save the form data to sessionStorage
    window.onbeforeunload = function() {

        var person_number = $('#person_number').val();
        var email = $('#username').val();

        if (person_number !== undefined || person_number !== null ||
            person_number != undefined || person_number != null){
            sessionStorage.setItem("person_number", person_number);
        }
        if (email !== undefined || email !== null ||
            email != undefined || email != null){
            sessionStorage.setItem("email", email);
        }
    }
})(jQuery);

2 个答案:

答案 0 :(得分:1)

你的问题已经很久了,你现在可能已经得到了答案,但如果没有,或者其他任何人也有同样的问题:

我认为你的jquery代码已加载到每个页面上,因此,你的onbeforeunload语句会尝试将字段的值存储在每个页面上,即使字段不存在也是如此,而且当项目得到“未定义”时。

在尝试存储字段的值之前,请确保该字段实际存在,使用getElementById,例如,如下所示:

var fieldExists = document.getElementById('person_number');

if(fieldExists !== null) {
    sessionStorage.setItem('person_number', $('#person_number').val());
}

在你的onload中,你不需要测试if(person_number!== undefined等等......只有当它为空时

if (person_number !== null) {
    $('#person_number').val(person_number);
}

希望这有帮助

答案 1 :(得分:0)

尝试这样的事情:

sessionStorage.personal_number

如果没有设置

,这将是未定义的

您可以使用此设置值:

sessionStorage.personal_number = 123456