sessionStorage returns 在一个字段中未定义,但在其他字段中有效

sessionStorage returns undefined in one field, but works in other

我有这个代码:

// 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());
}

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

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

我不明白为什么!

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

其次,为什么只有personal_number不起作用,而其他两个字段都很好?

更新:

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

我也找出了导致问题的原因,但我没有解决它。

当我访问一个没有输入字段的页面并且 return 然后,现在,我所有的字段输出 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);

尝试这样的事情:

sessionStorage.personal_number

如果不设置,这将是未定义的

您可以使用此设置值:

sessionStorage.personal_number = 123456

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

我认为您的 jquery 代码已加载到每个页面上,因此,您的 onbeforeunload 语句会尝试在每个页面上存储您的字段值,即使该字段不存在,也就是项目获得 "undefined".

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

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

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

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

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

希望对您有所帮助