0

我正在用 html5 制作一个应用程序。它就像一个基于测验的应用程序。我从 XML 中随机获取问题并一一显示。我为此使用页面导航。完成并提交答案后,您将切换到其他页面。如果我提交答案后,我将无法尝试返回。但我可以看到切换到我的问题页面时的反馈和分数。我已显示该反馈和分数并将其存储在本地存储中。我能够进行本地存储,但我得到的值是压倒一切的。所以我得到了最后提交的值。现在我关心的是明智地划分该值导航编号。现在如果我提交我的答案并假设我在导航编号 3 时会发生什么你正在查看导航第 1 部分然后我也在获取最后提交的值而不是第 1 部分的值。

这是代码片段:

//for navigation of pages
$(document).ready(function (){            
    /*$(document).bind("contextmenu",function(e){
    return false;
    });*/
    var obj;
    total=x.length;

    for(var j=0;j<x.length;j++)
    { 
        if(j==0)
        {
            $("#navigationlist").append('<li><a href="#" id="selected_link"  class="navg" onClick="display_nav('+j+',this);">'+(j+1)+'</a></li>');                 
            display_nav(j,$("#selected_link"))        
        }
        else
            $("#navigationlist").append('<li><a href="#" class="navg" onClick="display_nav('+j+',this);">'+(j+1)+'</a></li>');   
    }               

    $("#next").bind("click",function (){
        $(".navg").each(function(index){        
            if($(".navg").length==(i+1))
            {
                if(index==0)
                    obj=$(this);
                }
                else
                {
                if(index==(i+1))
                    obj=$(this);
            }
        });     


            for(var j=0;j<xmlDoc.getElementsByTagName("question").length;j++)
            {
                xmlDoc.getElementsByTagName("question")[j].removeAttribute("status");
            }

            $("#btnSubmit").attr("disabled","false");
            $("#btnSubmit").attr("onclick","checekAnswer()");

            display_nav(0,obj)
        }
        else
            display_nav((i+1),obj)
    });         
}); 


and

correctAnswers++;
            localStorage.setItem('feedback',JSON.stringify(feedback[0].childNodes[0].nodeValue));
            $("#feedback").append(score[0].childNodes[0].nodeValue);
            $("#feedback").append("<br/>");
            $("#feedback").append(feedback[0].childNodes[0].nodeValue);     
        }
        else
        {
            //var val = [];
            //val.push(feedback[0].childNodes[0].nodeValue);
            //localstorage.setItem('feedback', JSON.stringify(val));
            //localStorage.setItem('feedback',JSON.stringify(feedback[0].childNodes[0].nodeValue));
            //alert(localStorage.getItem("feedback"));
            /*var v={"test":feedback[0].childNodes[0].nodeValue};
            localStorage.setItem('feedback',v);
             alert(localStorage.getItem('feedback'));*/

            scores1.push(feedback[0].childNodes[0].nodeValue);

            localStorage.setItem("highscores",JSON.stringify(scores1));
            var scores = localStorage.getItem("highscores");

            alert(scores);
            scores = JSON.parse(scores);

            alert(scores[0]);

            $("#feedback").html(score[1].childNodes[0].nodeValue);
            $("#feedback").append("<br/>");
            $("#feedback").append(feedback[0].childNodes[0].nodeValue);
            $("#feedback").append("hello");

        }

        //$("#counter").html("left="+xPos+",top="+yPos);    
        $("#trFeedBack").show("slow");  
        display_nav(j,obj)  
    }
} // end function   
4

1 回答 1

0

如果我理解您的问题,您的问题是存储具有相同名称但与不同页面相关的项目。

LocalStorage 由域而不是页面定义,您必须更改您使用的密钥。通常的解决方案是为您想要的名称添加前缀。

例如 :

localStorage['pages.12.feedback'] = "the feedback I'm giving related to page 12";
localStorage['global.feedback'] = "the feedback I'm giving related to the global site";

(你会注意到我使用了简短的符号,我发现使用 setItem 更具可读性)

于 2012-05-09T06:09:26.640 回答