【问题标题】:Localstorage not storing URL本地存储不存储 URL
【发布时间】:2018-08-20 17:58:42
【问题描述】:

我正在尝试创建一个弹出模式,其中包含根据用户选择重定向的位置选项。我正在尝试将选定的 URL 作为首选项存储在 localstorage 中,这样用户只需选择一次他们的位置,而不必在每次访问该站点时都处理弹出窗口。

每次我在浏览器中测试时,重定向都会发生,但是当我输入 console.log 以打印出 localStorage 值时,它会返回 null 我在控制台中没有收到任何错误,所以我没有太多离开。

我的代码如下,我已经包含了一个指向 JS Fiddle here 的链接,非常感谢任何帮助!

    <div class="modal-body">
        <form name="siteSelector">
            <select onchange="save(); go()" id="site" name="site" SIZE="1" class="form-control form-control-lg">
                    <option value="non-value">Choose Site</option>
                    <option value="https://www.google.com">Google</option>
                    <option value="https://www.amazon.com/">Amazon</option>
                    <option value="https://www.guitarcenter.com/">Guitar Center</option>
            </select>
            <script>



                function save(){


                    document.getElementsByName("site").onchange = function(){
                        localStorage.setItem('site', document.getElementsByName("site"));
                    }



                    if (localStorage.getItem('site')) {
                        document.getElementsByName("site").options[localStorage.getItem('site')].selected = true;
                    }
                }

                function go(){
                    location = document.siteSelector.site.options[document.siteSelector.site.selectedIndex].value
                }


            </script>
        </form>
    </div>

【问题讨论】:

  • localStorage.setItem('site', document.getElementsByName("site")); 存储整个 &lt;select&gt; 元素,而不是所选选项的值。

标签: javascript local-storage


【解决方案1】:

您正在尝试将文档元素存储为 localStorage 项目。您可以存储所选选项或 URL 的索引。

在您的示例中,document.getElementsByName 返回 NodeList - 而不是单个元素。您的保存功能可能如下所示:

function save () {
   let element = document.getElementById("site");
   if (!element.selectedIndex)
       return; // you can display error if that happens. 
   localStorage.setItem('site', element.selectedIndex);
}  

【讨论】:

  • 我将其换入并替换了我的保存功能,但是当我从控制台调用它时,我仍然无法从本地存储中提取该项目。它仍然返回 null 或 undefined。
  • 你能给我一个更新的代码吗?我没有看到 JsFiddle 的变化。
  • 我不知道我做错了什么!因此,在您选择其中一个链接并点击 URL 之后,您就可以从控制台中提取存储的值了吗?我收到此错误:VM138:1 Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': Storage is disabled inside 'data:' URLs
  • 是的,当然。我更新了我的示例,您可以在控制台中看到选定的索引。当事件开始时,您可以看到已存储的索引,然后您可以看到更新的索引。
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
相关资源
最近更新 更多