1

localStorage に保存されているデータがあり、これらのデータを動的に出力したい (「前」と「後」の矢印をクリックしたとき)。ページをそれ自体にリダイレクトし、ドキュメントの準備ができたときにその日の名前が表示されるようにします。

[次へ] をクリックすると、日は正しくインクリメントされますが、前にクリックすると、日は正しくデクリメントされません。これは私が試したものです:

Javascript:

 function GetCurrentDay() {
     if (localStorage["CurrentDay"] == null || localStorage["CurrentDay"] == 'NaN' || localStorage["CurrentDay"]=="undefined") {
         localStorage["Counter"]= 0;
         i = localStorage["Counter"];
         localStorage["CurrentDay"] = localStorage["Day" + i];
    }
    return localStorage["CurrentDay"];
}
function GoToNextDay() {
    var d = GetCurrentDay();
    i = localStorage["Counter"];
    i = i*1 + 1;
    localStorage["Counter"] = i;
    if(i!= localStorage["SchoolDays"]+1){
        localStorage["CurrentDay"] = localStorage["Day" + i];
    }else{
        localStorage["CurrentDay"] = localStorage["Day" + 0];    
    }
    return true;
}
function GoToPrevDay() {
    var d = GetCurrentDay();
    i = localStorage["Counter"];
    i = i*1 - 1;
    localStorage["Counter"]=i;
    if(i>0){  
        localStorage["CurrentDay"] = localStorage["Day" + i];
    }else{
        i=localStorage["SchoolDays"];
        localStorage["Counter"]=i; 
        localStorage["CurrentDay"] = localStorage["Day" + i];    
    }
    return true;
}

どうすれば修正できるかについてのアイデアはありますか?

4

1 に答える 1

1

1 日ごとに表示してインクリメントするためにローカル ストレージが必要な理由がよくわかりません。予想される動作に関する詳細情報がなければ、十分な情報に基づいた回答を提供することは困難です。まず第一に、Bergi がコメントで示唆したように、ローカル ストレージを悪用しています。

たとえば、次の代わりに:

function GetCurrentDay() {
     if (localStorage["CurrentDay"] == null || localStorage["CurrentDay"] == 'NaN' || localStorage["CurrentDay"]=="undefined") {
         localStorage["Counter"]= 0;
         i = localStorage["Counter"];
         localStorage["CurrentDay"] = localStorage["Day" + i];
    }
    return localStorage["CurrentDay"];
}

あなたができる:

function GetCurrentDay() {
    var currentDay = localStorage.CurrentDay;
    if (!currentDay) {
        var counter = 0;
        currentDay = localStorage["Day" + counter];
    }
    localStorage.Counter = counter;
    localStorage.CurrentDay = currentDay;

    return currentDay;
}

上記のアプローチは、特定の値を取得または設定する必要がある場合にのみ localStorage にアクセスするため、はるかに優れています。その間のすべてがローカル変数で発生し、はるかに高速になります。また、可能であれば、ドット表記を使用して JavaScript オブジェクトにアクセスする必要があります。それははるかに読みやすいです。

さて、根本的な質問に戻ります。本当に localStorage が必要ですか? ページをリロードし、localStorage を使用して特定の値を追跡しているようです。これを避けてこの日フィールドを動的に更新すれば、あなたとあなたの訪問者にとってはるかに簡単になります. たとえば、ページのどこかに次のような html 構造があるとします。

<div id="day">0</div>
<span id="next">Next</span>
<span id="previous">Previous</span>

クリック イベントをリッスンし、それに応じて更新できます。

var day = 0,
    dayEl = document.getElementById('day');

document.getElementById('next').onclick = function() {
    dayEl.firstChild.nodeValue = ++day;
}

document.getElementById('previous').onclick = function() {
    dayEl.firstChild.nodeValue = --day;
}

localStorage は不要で、ページのリロードもありません。上記の例は非常に単純化されていますが、要点を理解し、アプローチを再考するのに役立つことを願っています.

于 2012-07-10T18:13:57.187 に答える