【问题标题】:Why is my local storage not working?为什么我的本地存储不起作用?
【发布时间】:2013-01-20 14:06:09
【问题描述】:

每个用户都可以从表单动态创建表格。每次进行更改或人员退出页面时,我都会尝试将表及其当前状态保存到本地存储中。名称存储用户的名称,我将其用作键。但是,它对我不起作用。我想我在需要使用 saveData 函数时保存数据,并在需要时使用 showData 函数解析它。谁能告诉我哪里出错了?

    userDiv.onclick=(function() {
            alert($(this).attr("id"));
            name= $(this).attr("id");
            window.location.href = "Createtask.html";
            showData();//TRYING TO SHOW THE USER'S TABLE WHEN PAGE OPENS
            }


    function makeChart() {
     table = document.createElement('table');
    var taskName = document.getElementById('taskname').value,
        header = document.createElement('th'),
        numDays = document.getElementById('days').value, //columns
        howOften = document.getElementById('times').value, //rows
        row,
        r,
        col,
        c;
    var counter = 0;
    var target = numDays * howOften;

    var cel = null;
    var myImages = new Array();
    myImages[0] = "http://www.olsug.org/wiki/images/9/95/Tux-small.png";
    myImages[1] = "http://a2.twimg.com/profile_images/1139237954/just-logo_normal.png";
    var my_div = document.createElement("div");
    my_div.id = "showPics";
    document.body.appendChild(my_div);
    var newList = document.createElement("ul");
    my_div.appendChild(newList);

    if (taskName == '' || numDays == '') {
        alert('Please enter task name and number of days');
    }
    if (howOften == '') {
        howOften = 1;
    }
    if (taskName != '' && numDays != '') {

        for (var i = 0; i < myImages.length; i++) {
            var allImages = new Image();
            allImages.src = myImages[i];
            allImages.onclick = function (e) {
                if (sel !== null) {
                    sel.src = e.target.src;
                    my_div.style.display = 'none';
                    sel.onclick = null;
                    counter++;
                    sel = null;
                    if (counter == target) {
                      alert("Show some fireworks "+name+" gets a reward");
                    }
                }
            };

            var li = document.createElement('ul');
            li.appendChild(allImages);
            newList.appendChild(li);
        }
        my_div.style.display = 'none';

        header.innerHTML = taskName;
        table.appendChild(header);

        function addImage(col) {
            var img = new Image();
            img.src = "http://cdn.sstatic.net/stackoverflow/img/tag-adobe.png";
            col.appendChild(img);
            img.onclick = function () {
                my_div.style.display = 'block';
                sel = img;
                saveData();
            };
        }
        for (r = 0; r < howOften; r++) {
            row = table.insertRow(-1);
            for (c = 0; c < numDays; c++) {
                col = row.insertCell(-1);
                addImage(col);
            }
        }
        document.getElementById('theRealHoldTable').appendChild(table);
        document.getElementById('createChart').onclick = null;
        saveData();/CALLING THE LOCAL STORAGE WHEN TABLE IS CREATED
    }
}

function saveData(){
     localStorage.setItem(name, JSON.stringify(table.innerHTML));
}

function showData(){
    JSON.parse(localStorage.getItem( name ));
}

【问题讨论】:

    标签: javascript html local-storage


    【解决方案1】:

    您正在尝试对 html 标记进行字符串化,但这是行不通的!你只能 JSON.stringify 一个 js 对象,这意味着一个类的实例,一个对象文字或一个数组:

    // this works because it is an instance
    var objInstance = new SomeClass();
    JSON.stringfy(objInstance);
    
    // this works as it is an object-literal
    var objLiteral = { mykey: 'myvalue' };
    JSON.stringfy(objLiteral);
    
    // this works as it is an array
    var arr = [1, 2, 3]
    JSON.stringfy(arr);
    
    
    // THIS DOES NOT WORK!!!
    JSON.stringify('<div>...</div>');
    

    只需去掉 JSON.stringify 部分的方法,这应该可以工作,因为 element.innerHTML 已经返回了一个字符串:

    function saveData(){
      localStorage.setItem(name, table.innerHTML);
    }
    
    function showData(){
      localStorage.getItem(name); 
    }
    

    【讨论】:

    • 您好,谢谢,我已经尝试过了,但它不适合我。信息不会保留。
    • 这很奇怪,因为如果我在 showData 中放置一个 console.log,它会向我显示表格,就像 01-20 16:04:24.505: I/Web Console(20294): ttttt cdn.sstatic.net/stackoverflow/img/tag-adobe.png"></…src="cdn.sstatic.net/stackoverflow/img/tag-adobe.png"></…src="cdn.sstatic.net/stackoverflow/img/tag-adobe.png"></…src="cdn.sstatic.net/stackoverflow/img/tag-adobe.png"></…> 在 file:///android_asset/www/myjavascript .js:333 ...但是当我重新加载用户页面时它没有显示。
    • 当然它没有显示日期,因为您的 showData 函数只是从本地存储中获取数据。你需要将它附加到你的标记中!
    • 当然,抱歉我看了很久。我仍然有一个错误,不明白为什么。第一个例外是 NOT_FOUND_ERR,所以我查看了这个stackoverflow.com/questions/11640367/…。然后我做了这个函数 showData(){ var showme = localStorage.getItem(name); var divvy = document.createElement("div"); divvy.id = "theRealTable"; var showIt= getElementById('theRealTable'); showIt.appendChild(showme); };它说 getElementById 没有定义。
    • document.getElementById('theRealTable'),但您的表格需要 id-attribute 'theRealTable'
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签