【问题标题】:Local Storage multiple fields with one field overwriting the second本地存储多个字段,其中一个字段覆盖第二个字段
【发布时间】:2013-09-08 13:35:52
【问题描述】:

我正在创建一个限制电视内容的 Chrome 扩展程序。我有两个将值存储到本地存储的下拉菜单表单。

Javascript(外部文件):

ratings.js

window.onload=function (){
    document.getElementById('saveRatings').onsubmit=saveRatings;
}

function saveRatings() {
    var selectedRatings = document.forms["ratings_form"]["ratings"].value;

// store selectedRatings to local storage
    localStorage.storedRatings = selectedRatings;

}

age.js

window.onload=function (){
    document.getElementById('saveAge').onsubmit=saveAge;
}

function saveAge() {
    var selectedAge = document.forms["age_form"]["age"].value;

// store selectedAge to local storage
    localStorage.storedAge = selectedAge;

}

HTML

                    <summary>Select Content to Allow</summary><br>
                        <form name = "ratings_form" id="saveRatings">
                        <select name="ratings" multiple="multiple">
                            <option value="G">G only</option>
                            <option value="G/PG">G/PG only</option>
                            <option value="G/PG/PG13">G/PG/PG-13 only</option>
                            <option value="G/PG/PG13/R">G/PG/PG-13/R</option>
                        </select>
                        <div></div>
                        <input type="submit" value="Save">  </form>

                        <summary>Select Age Group to Deter</summary><br>
                        <form name = "age_form" id="saveAge">
                        <select name="age" multiple="multiple">
                            <option value="e">Everyone</option>
                            <option value="ct">Children & Teens;</option>
                            <option value="c">Children</option>
                            <option value="0">Turn off</option>
                        </select>
                        <div></div>
                        <input type="submit" value="Save">
                        </form>

age_form 的键值对存储正确。但是, ratings_form 总是给我未定义的。如果我切换顺序(首先是年龄,然后是评级),那么 ratings_form 的键值对会给我正确的值,而 age_value 会给我未定义的值。似乎第二种形式的值正在覆盖第一种形式的值。如何防止发生这种覆盖。

感谢您的帮助。

【问题讨论】:

    标签: html google-chrome-extension local-storage


    【解决方案1】:

    当然,您的问题是您正在用最后运行的代码覆盖 window.onload 函数!您只需要在每个函数中添加一个简单的 console.log(); 即可查看第一个函数没有被调用。您可以使用addEventListener() 或使用jQuery 的$(document).ready() 来解决此问题。

    window.addEventListener('load', function() {
      console.log('1');
    });
    
    window.addEventListener('load', function() {
      console.log('2');
    });
    

    请记住onloadwindow 的一个属性,其行为与任何变量/属性一样。考虑一下:

    var foo = 'bar';
    foo = 'baz';
    console.log(foo); // displays 'baz', of course! You changed the value!
    

    这正是您使用 onload 函数所做的。你把它改成了别的东西。

    【讨论】:

    • localStorage.foo 和 localStorage.getItem('foo') 都可以。唯一的区别是如果 foo 不存在 getItem 将返回 null 点或数组概念将导致未定义。
    • 嗯。我可能读过一些关于它的失败教程:(我记得读过 set/get 是合适的方法......不知道为什么这么说。我也不知道如果不需要他们为什么还要打扰他们。我不知道然后看不出这段代码有什么问题,除了它没有遵循其他好的做法(全局混乱)。
    • @dc5 发现了问题。他没有关闭他的表格。叹息。
    • 我的错误 --- 在我的代码中,我确实关闭了表单。只是对这里的剪切/粘贴工作很草率。请帮忙。
    • @user1364628 哎呀,我不知道我是怎么错过的。你的问题很明显。请参阅我的更新答案。由于您是 SO 新手,我还要求您接受我的回答,如果它是您问题的解决方案。我相信确实如此。
    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2011-09-23
    • 2019-06-25
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多