如何在单击按钮时清除 localStorage

Posted

技术标签:

【中文标题】如何在单击按钮时清除 localStorage【英文标题】:How to clear localStorage on button click 【发布时间】:2021-12-19 10:46:00 【问题描述】:

我按照 Youtube 上关于 localStorage 的教程进行操作,一切顺利。之后我试图搞乱这些概念并想添加一个按钮来删除 localStorage (id ="btnClear")。

现在我已经尝试了一切,但它不允许我删除存储。我认为这是因为我在函数内部声明了常量,我可能必须将它们存储在外部某处并对输入进行字符串化。但是即使在这种情况下,我也可以以某种方式清除 localStorage 吗?

<body>
<content>
      <fieldset>
        <legend>Insert Data</legend>
        <input type="text" id="inpKey" placeholder="Insert Key.." />
        <input type="text" id="inpValue" placeholder="Insert Value.." />
        <button type="button" id="btnInsert">Insert</button>
      </fieldset>
      <fieldset>
        <legend>Local Storage</legend>
        <div id="lsOutput"></div>
        <br />
        <button type="button" id="btnClear">Clear</button>
      </fieldset>
    </content>
  </body>
  <script type="text/javascript">
    const inpKey = document.getElementById("inpKey");
    const inpValue = document.getElementById("inpValue");
    const btnInsert = document.getElementById("btnInsert");
    const lsOutput = document.getElementById("lsOutput");
    const btnClear = document.getElementById("btnClear");

    btnInsert.onclick = function () 
      const key = inpKey.value;
      const value = inpValue.value;

      if (key && value) 
        localStorage.setItem(key, value);
        location.reload();
      
    ;

    for (let i = 0; i < localStorage.length; i++) 
      const key = localStorage.key(i);
      const value = localStorage.getItem(key);
      lsOutput.innerhtml += `$key: $value`;
    

    //BUTTON CLEAR

    btnClear.onclick = function () 
      localStorage.clear();
    ;
  </script>

【问题讨论】:

是否调用了 btnClear.onclick 函数,你检查了吗? 尝试将它(脚本)放入document.ready 请看我的回答,这样可以节省一些打字时间! 【参考方案1】:

在浏览器中检查您的本地存储。您的代码实际上确实清除了 localStorage。您缺少的是更新您的用户界面。将您的 Button 清除代码替换为:

btnClear.onclick = function () 
   localStorage.clear();
   if(localStorage.length === 0)
      lsOutput.innerHTML = "";
;

这是一个如何检查本地存储的教程,例如:How to view or edit localStorage

【讨论】:

【参考方案2】:

看看这里,我已经将你所有的代码从 HTML 更新为 JS。

你可以测试它on jsfiddle,因为 *** 会抛出这个错误:


  "message": "Uncaught SecurityError: Failed to read the 'localStorage' property from 'Window': The document is sandboxed and lacks the 'allow-same-origin' flag.",
  "filename": "https://stacksnippets.net/js",
  "lineno": 37,
  "colno": 33

另外,最好在您的大多数活动中使用document.addEventListener(因为它们可以为您提供到达者体验)

查看更多活动here 来自此 URL 的引用:

内联事件的显着缺点是与事件不同 如上所述的侦听器,您可能只有一个内联事件 分配的。内联事件存储为 元素[doc], 意味着它可以被覆盖。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>How to clear localStorage on button click</title>
</head>

<body>

    <content>
        <fieldset>
            <legend>Insert Data</legend>
            <input type="text" id="inpKey" placeholder="Insert Key.." />
            <input type="text" id="inpValue" placeholder="Insert Value.." />
            <button type="button" id="btnInsert">Insert</button>
        </fieldset>
        <fieldset>
            <legend>Local Storage</legend>
            <ul id="outputList"></ul>
            <br />
            <button type="button" id="btnClear">Clear</button>
        </fieldset>
    </content>

    <script type="text/javascript">
        const printLSContent = function (el) 
            for (let i = 0; i < localStorage.length; i++) 
                let key = localStorage.key(i);
                let value = localStorage.getItem(key);
                let li = document.createElement('li');
                li.innerHTML = `K: $key; V: $value`;
                el.appendChild(li);
            
        
        document.addEventListener("DOMContentLoaded", function (event) 
            const inpKey = document.getElementById("inpKey");
            const inpValue = document.getElementById("inpValue");
            const btnInsert = document.getElementById("btnInsert");
            const outputList = document.getElementById("outputList");
            const btnClear = document.getElementById("btnClear");
            // element.addEventListener(event, handler[, options]); // type - event type; listener - event handler; options -
            btnInsert.addEventListener('click', function () 
                const key = inpKey.value;
                const value = inpValue.value;
                localStorage.setItem(key, value);
                location.reload();
            , false);
            printLSContent(outputList);

            // //BUTTON CLEAR
            btnClear.addEventListener('click', function () 
                localStorage.clear();
                location.reload();
            , false);
        );
    </script>
</body>

</html>

【讨论】:

以上是关于如何在单击按钮时清除 localStorage的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 在按钮单击时清除表单字段

在 Vue.js 中单击按钮时清除文本字段?

如何在按钮单击时将新行添加到数据库中的jTable而不清除现有行

单击按钮时从同一组件中清除数据

QLineEdit 单击时清除文本并从按钮读取文本[关闭]

单击按钮时从通知中心清除通知