0

私はhtml5でアプリを作っています。それはクイズベースのアプリのようなものです。XMLからランダムに質問を取得し、1つずつ表示しています。そのためにページナビゲーションを使用しています。回答を完了して送信すると、他のページに切り替わります。一度回答を送信すると、元に戻すことはできません。しかし、私の問題であるそのページに切り替える際のフィードバックとスコアを見ることができます。そのフィードバックとスコアを表示して、ローカルストレージに保存します。ローカルストレージを実行できますが、取得している値が上書きされます。だから私は最後に提出された値を取得しています。今私の懸念はその値をナビゲーション番号で分割することです。今、私が答えを提出し、ナビゲーション番号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 に答える