HTML5本地存储项目未正确保存

时间:2014-10-03 14:47:46

标签: javascript jquery local-storage query-string

我正在尝试从url查询字符串中保存一个值,该字符串需要插入到用户导航到的任何页面的表单中,但到目前为止,我无法让代码通过包含的初始登录页面原始查询字符串。

使用此方法获取X的查询字符串值,并将其保存在localStorage中以获取密钥Xcode:

<script>
var field = 'x';
var url = window.location.href;
if(url.indexOf('?' + field + '=') != -1) {

    function getUrlVars()
    {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

var user_code = getUrlVars()["x"];

if (localStorage) { 
   localStorage.setItem("xcode",user_code);
}

</script>

然后使用它将它插入到类.xcode-field的任何输入的“value”属性中:

<script>
window.onload = function() {
    var thecode = localStorage.getItem("xcode");
     if (thecode != "undefined" && thecode != "null") {
      $(".xcode-field").attr("value",thecode);
} else {
      $(".xcode-field").attr("value","default");
}
}
</script>

如果该项目不在LocalStorage中,则应插入默认值(或者它应该什么也不做,但不知道如何设置它。)

我现在的问题是,这适用于用户登陆的页面(example.com/?x=1234),但当他们导航到任何其他页面时,表单中的值将填充“undefined”。因此,查询字符串值也没有被正确存储,上面的else语句也不能插入“default”。知道我在这里做错了吗?谢谢!

小提琴(但似乎没有在那里工作):http://jsfiddle.net/08suhbuk/

更新:终于明白了! LocalStorage正在连续页面上重置,因为初始查询字符串解析和setItem将在每个页面上重复并覆盖原始值。我通过添加以下代码来解决它,以检查第一个脚本周围是否存在查询字符串:

var field = 'x';
var url = window.location.href;
if(url.indexOf('?' + field + '=') != -1) {

在。编辑的最终工作代码。

0 个答案:

没有答案