我无法使其工作并在页面刷新时保存变量。
这里是我正在使用的。
window.onload = function () {
if (localStorage.getItem("forg") === null) {
localStorage.getItem("forg2");
} else {
localStorage.getItem("forg");
}
}
function forgot() {
$('#pass_icon').removeClass("pass-icon");
$('#forgot').replaceWith('<input class="login_register" id="forgot2" type="button" value="' + login + '" />');
}
function forgot2() {
$('#pass_icon').addClass("pass-icon");
$('#logintitle').html('<h1>' + login_form + '</h1>');
}
$(document).on('click', '#forgot', function () {
forgot();
localStorage.removeItem("forg2");
localStorage.setItem("forg", forgot());
});
$(document).on('click', '#forgot2', function () {
forgot2();
localStorage.removeItem("forg");
localStorage.setItem("forg2", forgot2());
});
此代码无法保存,并且页面重新加载时默认情况下会获得function forgot()
。
我想要的是当我点击#forgot2
然后当页面刷新时,它将保持此功能forgot2()
。
我不知道我在这里做错了什么。
我有最新版本的firefox(27)。
答案 0 :(得分:2)
这两行代码看起来像你的问题:
localStorage.setItem("forg", forgot());
和
localStorage.setItem("forg2", forgot2());
我不知道你要做什么,这两行代码正在做的是立即调用这两个函数,然后尝试将这些函数的返回结果放入localStorage。由于这两个函数都没有返回值,因此您尝试将undefined
放入localStorage。显然,除了擦除以前在LocalStorage中为该项目所做的事情之外,这将无法完成任何有用的事情。
如果你想要做的是在localStorage中放置一个函数,那么你无法做到。 localStorage接受字符串。您需要在那里存储一个字符串,然后您可以在将来检查该字符串,并根据您在localStorage中找到的字符串更改您的逻辑。
因此,例如,您可以在localStorage中存储两个字符串中的一个:"forgot"
或"forgot2"
。然后,当您从localStorage检索项目时,可以使用if
语句检查以查看找到的字符串,然后根据if
语句的结果执行不同的代码。首先,您可能只需要localStorage中的一个键,并且可以为该单个键使用不同的值。以下是您如何阅读它的想法:
var storageVal = localStorage.getItem("forg");
if (storageVal) {
if (storageVal === "forget") {
// code here for the "forget" state
} else if storageVal === "forget2" {
// code here for the "forget2" state
}
}
$(document).on('click', '#forgot', function () {
forgot();
localStorage.setItem("forg", "forget");
});
$(document).on('click', '#forgot2', function () {
forgot2();
localStorage.setItem("forg", "forget2");
});