我有这段代码:
// 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_number
,email
和password
添加一个值,它会保存到我的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);
答案 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