【问题标题】:How to use localStorage to cache button result?如何使用 localStorage 缓存按钮结果?
【发布时间】:2019-03-30 10:32:38
【问题描述】:

我有一个完全用 JS 制作的按钮。

我想保存它是处于真还是假状态,这样如果用户离开页面,按钮在返回时将处于相同状态。我想使用 localStorage,但我对 JS 比较陌生,所以它们可能是更好的解决方案。

当前代码:

var btn;
var btn = document.createElement("BUTTON");
btn.onclick =  function() {myFunction()};
btn.style.height = "100%";
btn.style.width = "98%";
btn.style.border = "0px";
btn.innerHTML = "CLICK ME";  
btn.id = "toggle";


document.getElementById("button").appendChild(btn);

function myFunction() {
    document.getElementById('notepad').classList.toggle('hide'); return false
}

编辑代码:

window.onload = function initBt(){
var buttonState = localStorage.getItem('mybutton');
if ( null !== buttonState )
{
buttonState && document.getElementById('notepad').classList.add('hide');
}
}
var btn;


var btn = document.createElement("BUTTON");
btn.onclick =  function() {myFunction()};
btn.style.height = "100%";
btn.style.width = "98%";
btn.style.border = "0px";
btn.innerHTML = "CLICK ME";  


btn.id = "toggle";


document.getElementById("button").appendChild(btn);


function myFunction() {
var bt = document.getElementById('notepad');
bt.classList.toggle('hide');
localStorage.setItem('mybutton', bt.classList.contains('hide'))
return false;
}

【问题讨论】:

  • 请先尝试使用 localStorage。然后,如果您遇到问题,请返回并展示您的尝试
  • @charlietfl 我会,但我只看到它用于文本值而不是结果,所以我不确定如何让它工作。但我会继续努力。
  • 因此您为按钮的不同状态存储不同的值,然后检查它在页面加载时的状态并做出相应的反应

标签: javascript html


【解决方案1】:

您可以在您的代码中使用以下函数来存储和检索按钮状态:

localStorage documentation

function store(key, data)
{
    localStorage.setItem(key, JSON.stringify(data));
}

function retrieve(key)
{
   var data = localStorage.getItem(key);
   return data ? JSON.parse(data) : null;
}

function remove(key)
{
   localStorage.removeItem(key);
}

用法示例:

store('mybutton', buttonState);
var buttonState = retrieve('mybutton');
if ( buttonState !== null )
{
   /* set button State*/
}
else
{
   /* state has not been saved before, initialise */
}

注意因为localStorage可以处理仅字符串值,我们在保存时使用JSON.stringify从数据中生成字符串,在按顺序检索时使用JSON.parse存储和检索任意数据(当然是JSON valid structures

对于您更新的问题,请尝试以下操作(如果添加了整个 html 结构会更有帮助,因为缺少一些元素,但无论如何):

// include the needed localStorage manipulation methods
function store(key, data)
{
    localStorage.setItem(key, JSON.stringify(data));
}
function retrieve(key)
{
   var data = localStorage.getItem(key);
   return data ? JSON.parse(data) : null;
}
function remove(key)
{
   localStorage.removeItem(key);
}

// create and initialise the button
var btn = document.createElement("BUTTON");
btn.onclick =  function() {myFunction()};
btn.style.height = "100%";
btn.style.width = "98%";
btn.style.border = "0px";
btn.innerHTML = "CLICK ME";  
btn.id = "toggle";
document.getElementById("button").appendChild(btn);
var buttonState = retrieve('mybutton');

// make sure at this point element with id="notepad" exists on page
if ( null !== buttonState )
{
    buttonState && document.getElementById('notepad').classList.add('hide');
}

function myFunction() {
var bt = document.getElementById('notepad');
bt.classList.toggle('hide');
store('mybutton', bt.classList.contains('hide'));
return false;
}

对于可以支持多种存储机制(也支持服务器端php和node.js)的灵活的web/浏览器缓存库,请查看Unicache(ps.我是作者)

当然还有其他库(例如localForage

【讨论】:

  • 如何表示按钮的状态?
  • 这取决于您的应用程序,可能一个简单的truefalse 值就足够了(即按钮设置或未设置)。然后只需存储此值并在检索时相应地更新按钮
  • 如果答案解决了您的问题,请接受它。回答 SO 的人会有所帮助,但他们的努力仍然需要得到认可
  • 我无法让你的代码工作,我搞砸了一段时间,但从来没有让它工作。感谢您的帮助:) 您使用的检索和存储也是图书馆的一部分吗?
  • @STOAM,存储/检索函数不是库的一部分,但您可以在我的回答中检查使用类似方法的链接库,或者如果您不想要完整库的开销,只需使用这些有用的函数.你到底在哪里卡住了,也许我可以帮忙?我怀疑您没有在代码中的适当位置放置存储和检索调用,以便正确存储和检索按钮状态..
猜你喜欢
  • 2022-12-23
  • 2018-11-30
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2015-10-10
  • 2016-04-17
相关资源
最近更新 更多