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_number
、email
和 password
添加一个值,它会保存到我的 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);
}
希望对您有所帮助
我有这个代码:
// 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_number
、email
和 password
添加一个值,它会保存到我的 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);
}
希望对您有所帮助